jQuery: разрешены ли последовательные запросы Ajax? - PullRequest
0 голосов
/ 29 ноября 2009
$(document).ready(function() {
  $("#firstTimeSubmit").click(function(event) {
    event.preventDefault();
    var name = $("#firstTimeText").val();
    if (name == "" || name.length > 12) {
      $("#updates").html("<b>Dummy! Invalid name!</b>");
    } else {
      $.ajax({
        type: "GET",
        url: "http://hiscore.runescape.com/index_lite.ws?player=" + name,
        success: function() {           
          $.ajax({
            type: "POST",
            url: "includes/handlers/firsttime.php",
            data: { name: name },
            success: function() {
              $("#updates").html("<b>Now tracking: " + name + "</b>");
            },
            error: function() {
              $("#updates").html("<b>Already being tracked.</b>");
            }
          }); 
        },
        error: function() {
          $("#updates").html("<b>Name doesn't exist.</b>"); 
        }               }       
      });
    }
  });
});

Должен ли работать запрос $ .ajax внутри другого запроса $ .ajax?

Ответы [ 2 ]

10 голосов
/ 29 ноября 2009

В принципе это может работать, но ваш синтаксис неправильный. Вы хотите:

success: function() {
  $.ajax({...});
}

и изменить:

error: $("#updates").html("<b>Name doesn't exist.</b>");

до:

error: function() {
  $("#updates").html("<b>Name doesn't exist.</b>");
}

То, что вы сделали выше, - это присвоение объекта jquery атрибутам success и error (анонимного объекта). Это не сработает. Вам нужно назначить функцию, которая делает эти вызовы jquery. Также измените:

data: "name=" + name,

до

data: {
  name: name
},

В противном случае это один запрос ajax за другим.

То, на что вы обычно должны обращать внимание, это попытки сделать слишком много одновременных Ajax-запросов, так как браузеры имеют (как правило, довольно низкие) ограничения на количество запросов к одному домену (например, IE, по крайней мере, определенные версии, имеет ограничение 2). В вашем случае запросы являются последовательными, и обработчик успеха для одного не имеет ничего особенного, препятствующего другому запросу.

Возможно, вы захотите обернуть часть этого в именованную функцию, чтобы сделать код более читабельным.

5 голосов
/ 29 ноября 2009

Организуйте свой код в удобном для чтения виде. Это очень поможет вам в процессе разработки. Разделив вещи, как показано ниже, вы сможете гораздо проще их проверить, потому что вы можете вызывать вещи из firebug. Это также делает это намного проще, поскольку вещи становятся более сложными, как они всегда делают.

Имена функций - это случайные предположения о том, что они действительно делают.

$(document).ready(function() {
    $("#firstTimeSubmit").click(function(event) {
        event.preventDefault();
        var name = $("#firstTimeText").val();
        if(name == "" || name.length > 12) {
            $("#updates").html("<b>Dummy! Invalid name!</b>");
        } else {
            getHighScore(name);
        }
    });     
});

function getHighScore(name){
    $.ajax({
        type: "GET",
        url: "http://hiscore.runescape.com/index_lite.ws?player=" + name,
        success: function() {
            setUpFirsttime(name);
        },
        error: function() {
            $("#updates").html("<b>Name doesn't exist.</b>"); 
        }
    });
}
function setUpFirsttime(name){
    $.ajax({
        type: "POST",
        url: "includes/handlers/firsttime.php",
        data: { name: name },
        success: function(){
            $("#updates").html("<b>Now tracking: " + name + "</b>");
        },
        error: function(){
            $("#updates").html("<b>Already being tracked.</b>"); 
        }
    }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...