Получить параметры запроса, передаваемые Ajax при объединении вызовов Ajax с использованием обещаний и массивов - PullRequest
0 голосов
/ 09 июня 2018

Я использую JQuery для объединения вызовов ajax в среде WordPress, чтобы поразить сторонний API.

Рабочий процесс таков, что сначала я получаю массив объектов, каждый из которых имеет start_date и * 1004.*.Затем мне нужно сделать ajax-вызовы с использованием этих параметров и связать ответ с исходными параметрами.Мне также нужно выполнять запросы ajax один за другим, потому что не критично, что все они загружаются сразу, и я хочу контролировать сетевые запросы (на странице загружается много других ресурсов).

В любом случае, вот мой код:

var superobjects; //variable to hold final result - want the response and the original date params in this array of objects
var callback = function(result) {
  superobjects.push(result); //callback of ajax request using jQuery.when
};
var requests = []; // array to hold requests before doing them one at a time with jQuery.when

for (i = 0; i < data.length; i++) {
  requests.push(jQuery.ajax({
    url: wpApiSettings.root + 'superplugin/v1/superdooperendpoint/' + api_key + "/" + data[i].start_date + "/" + data[i].end_date,
    method: 'GET',
    beforeSend: function(xhr) {
      // Set nonce here
      xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
    },
    done: function(data) {
      console.log({
        start_date: data[i].start_date,
        end_date: data[i].end_date
      });
      //this console.log above never fires
    }
  }));
}
setTimeout(function() {
  console.log(superobjects) //no request information here!
}, 2222);

jQuery.when.apply(undefined, requests).then(function(result) {
  callback(result) //run the ajax sequentially and then do the callback - problem is I've lost the request params here!
});

Как вы можете сказать, когда я делаю superobjects в журнале, он не имеет никакой информации от start_date или end_date Я использовал для создания запроса, просто результат вызова ajax.Есть ли способ сохранить этот последовательный рабочий процесс AJAX и получить параметры запроса в моем окончательном superobject?Я предполагаю, что это с умным использованием функций и областей, но я не вижу этого прямо сейчас, поэтому ищу помощь!:)

1 Ответ

0 голосов
/ 10 июня 2018

Я использовал закрытие, я верю, что он делает то, что я хочу:)

var superobjects = [];
var success_callback = function(result) {
  superobjects.push(result);
};
var requests = [];
console.log(data);
for (var i = 0; i < data.length; i++) {
  (function(i, data) {
    requests.push(jQuery.ajax({
      url: wpApiSettings.root + 'superplugin/v1/superdooperendpoint/' + api_key + "/" + data[i].start_date + "/" + data[i].end_date,
      method: 'GET',
      beforeSend: function(xhr) {
        // Set nonce here
        xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
      },
      success: function(result) {
        success_callback({
          start_date: data[i].start_date,
          end_date: data[i].end_date,
          span: data[i].span,
          result: result
        });
      }
    }));
  })(i, data);
};
setTimeout(function() {
  console.log(superobjects)
}, 2222);

jQuery.when.apply(undefined, requests).then(function(result) {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...