是否可以在 Magento 2 后端异步触发多个 ajax 请求?

Is it possible to fire multiple ajax requests asynchronously in Magento 2 backend?

标题说的是什么。 我正在尝试 运行 使用 AJAX "call 1" 的导入脚本,我想跟踪使用 AJAX "call 2" 的导入(出于反馈目的)。 为了向最终用户提供实时反馈,这些调用需要同时 运行 并且 "call 2" 需要调用自身(递归)以轮询更改。

我有控制器和电话,一切正常,只是不是在同一时间。 是数据库软锁还是其他原因?

顺便说一句,我知道 ajax 调用的 "async: true" 设置。

[编辑] 看起来 Magento 阻止我同时执行两个控制器。谁能证实这一点?

我认为您不能同时执行两个 AJAX 请求。这意味着您始终需要有一个逻辑顺序,a.k。首先 'call 1',然后 'call 2'。如果你想确保调用 2 总是在调用 1 之后触发,只需将它放在成功方法中。

像这样:

$.ajax({
  url: "test-to-call-1",
  context: call-1-context
}).done(function() {
  $.ajax({
    url: "test-to-call-2",
    context: call-2-context
  }).done(function() {
    Now both ajax requests are done.
    And you could add the context of the first one to the second call.
  });



});

如果您想启用轮询,只需放置一个 setTimeOut 循环,在其中执行第二个 AJAX 调用 :)

像这样:

function start_polling(counter){
  if(counter < 10){  // poll maximum of 10 times.
    setTimeout(function(){
      counter++;


     $.ajax({
            url: "test-to-call-2",
            context: call-2-context
          }).done(function() {
           start_polling(counter);
            Now both ajax requests are done. 
            And you could add the context of the first one to the second call.
          }).error(function(){
           start_polling(counter);
          });




    }, 1000);
  }
}
$.ajax({
  url: "test-to-call-1",
  context: call-1-context
}).done(function() {

  start_polling(0)



});

好吧,我想通了。

我所要做的就是设置:

session_write_close();

在启动导入的方法前面,我可以通过第二个 AJAX 调用开始轮询!

这可能不受欢迎,但它确实有效