2017-02-16 16 views
1

Что говорится в названии. Im пытается запустить сценарий импорта с AJAX «вызов 1», и я хочу отслеживать импорт (для целей обратной связи) с помощью AJAX «call 2». Чтобы дать живую обратную связь для конечного пользователя, эти вызовы должны выполняться одновременно, а «вызов 2» нужно вызвать (рекурсивный) для опроса для изменений.Возможно ли запустить несколько аякс-запросов асинхронно в бэкэнд Magento 2?

У меня есть контроллеры и звонки, и все работает нормально, просто не в ТОЛЬКО В ТОЧНОЕ время. Является ли это мягкой блокировкой в ​​базе данных или это что-то еще?

Btw Мне известно о настройке «async: true» для вызова ajax.

Похоже, что Magento мешает мне выполнять два контроллера одновременно. Может ли кто-нибудь подтвердить это?

ответ

1

Хорошо, я понял это.

Все, что я должен был сделать было установлено:

session_write_close(); 

В передней части метода, который начался импорт и я мог начать опрос со вторым AJAX вызова!

Возможно, это нахмурило, но оно работает

1

Я думаю, что вы не можете одновременно выполнять два запроса AJAX. Это означает, что вам всегда нужно иметь логический порядок, a.k. сначала «вызов 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