2017-02-16 62 views
1

標題說什麼。 我試圖通過AJAX「調用1」來運行導入腳本,我想通過AJAX「調用2」跟蹤導入(用於反饋目的)。 爲了給最終用戶帶來實時反饋,這些調用需要同時運行,並且「調用2」需要調用自己(遞歸)來輪詢更改。是否有可能在Magento 2後端異步觸發多個Ajax請求?

我有控制器和調用,一切正常,只是不在同一時間。 它是數據庫上的軟鎖還是別的東西?

btw我知道ajax調用的「async:true」設置。

它看起來像Magento阻止我在同一時間執行兩個控制器。任何人都可以確認嗎?

回答

1

好吧,我明白了。

所有我需要做的就是設置:

session_write_close(); 

在啓動該進口,我可以與第二AJAX調用開始輪詢前面的方法!

這可能是皺眉,但它的作品

1

我認爲你不能同時做兩個AJAX請求。這意味着你總是需要有一個合乎邏輯的順序,也就是說。先調用1,然後調用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) 



}); 
+1

我很感謝你的答案,但它不是我要找的。 我想在**導入期間給最終用戶反饋**,而不是之後。 我主要使用Symfony工作,並且在該框架內可能會有併發的AJAX調用,所以這就是爲什麼我開始構建我的想法,現在我因爲Mag2而陷入困境。 它也可能與會話鎖相關。 我試着弄明白了。 感謝您的回答! – MariusJP

+0

啊,好的。這可能是我的一個誤解。不知道它如何與PHP框架一起工作,但是在Python中,我會在一個單獨的工作者上創建一個後臺任務。在這個任務中,我會創建一個基於可以輪詢的任務的百分比指示:)所以你看,一個稍微不同的問題可能導致完全不同的anwers;) – gabn88