Итак, у меня есть следующая функция JS:

var name_list = names; //mike,steve,sean,roger
jQuery.ajax({
    type: "GET",
    url: custom.ajax_url, 
    dataType: 'html',
    data: ({ action: 'some_function', name_list:name_list}),
    success: function(data){    
            alert('success')      
});

Здесь есть переменная, которая содержит массив значений («Майк, Стив, Шон, Роджер» отдельно через запятую).

Теперь я хочу использовать первое значение для вызова ajax (name_list = mike), и как только это будет сделано, я хочу повторить тот же вызов ajax со вторым значением (name_list = steve).

Вот мой вопрос.

Как использовать индивидуальное значение в переменной и использовать последующее значение только тогда, когда функция (вызов ajax) успешна?

Благодарность!

3
Steve Kim 17 Дек 2015 в 03:56

3 ответа

Лучший ответ

Вот один из способов сделать это:

var name_list = ['mike','steve','sean','roger'];

function recursive(list, done) {
     list = list.slice();
     (function next() {
        var name = list.shift();
        jQuery.ajax({
            type: "GET",
            url: 'url', 
            dataType: 'html',
            data: ({ action: 'some_function', name : name }),
            success: function(data) {    
                console.log('success', name);      
            }
        }).then(list.length ? next : done);
    }());
}

recursive(name_list, function() {
    console.log('all done');
});
1
undefined 17 Дек 2015 в 01:13

Я добавил кнопку, чтобы продемонстрировать, что она работает, используйте консоль для наблюдения.

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <title>SerialArrayFeed</title>

</head>

<body>

  <button id="btn">Feed</button>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  <script>
    jQuery.ajax({
      type: "GET",
      url: "_custom.ajax.url",
      dataType: "html",

      data: ({
        action: serialArrayFeed,
        names: arr
      }),
      success: function(data) {
        if (data != undefined) {
          alert('success');
        }
      }
    });
    var arr = ['mike', 'steve', 'sean', 'roger'];
    var qty = arr.length;

    function serialArrayFeed(arr) {
      for (var i = 0; i < qty; i++) {
        var next = arr.pop(i);
        break;
        return next;
      }
      console.log('arr: ' + arr + ' next: ' + next);
    }

    var btn = document.getElementById('btn');
    btn.addEventListener('click', function(event) {
      serialArrayFeed(arr);
    }, false);
  </script>
</body>

</html>
1
zer00ne 17 Дек 2015 в 02:32

просто попробуйте создать нужную вам функцию с ajax и передать значения, и в случае успеха запустите ajax снова, пока он не достигнет последней длины вашего массива

var name_list = names.split(','); //mike,steve,sean,roger
var repeat_Ajax = function(i){
  jQuery.ajax({
    type: "GET",
    url: custom.ajax_url, 
    dataType: 'html',
    data: { action: 'some_function', name_list:name_list[i]}, // no need for `( )` here
    success: function(data){
        if(i !== name_list.length){
          repeat_Ajax(i+1);
          alert('success');
        }    
  });
}
repeat_Ajax(0);

Не проверенный код, но я надеюсь, что он сработает

1
Mohamed-Yousef 17 Дек 2015 в 01:12