2009-11-29 4 views
0
$(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 работает?jQuery: разрешены последовательные запросы Ajax?

+0

Пожалуйста, обратите внимание на форматирование. Помогает. – cletus

+0

Я пробовал. Вкладка в моем редакторе эквивалентна четырем пробелам, но когда я копирую и вставляю сюда, это огромная разница. – Andrew

+1

Обычно с любым редактором есть возможность использовать вкладки или пробелы (для вкладок). SO довольно узкая. Не используйте вкладки. Два пробела - это стандартный отступ, используемый здесь. Все больше и больше, как правило, слишком сильно убегают от экрана. – cletus

ответ

10

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

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

и изменения:

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

к:

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

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

data: "name=" + name, 

в

data: { 
    name: name 
}, 

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

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

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

+1

Спасибо за все советы. Я обновил все, и теперь он выводит «Имя не существует», независимо от того, что я сказал, что означает, что 'http://hiscore.runescape.com/index_lite.ws?player=" + name' возвращает 404, но? ... Я не вижу, как это происходит. (Посетите http://hiscore.runescape.com/index_lite.ws?player=jim и http://hiscore.runescape.com/index_lite .ws? ​​player = jimmy) – Andrew

+0

Обновлен код в моем первом сообщении с тем, что я сейчас запускаю. – Andrew

+0

http://hiscore.runescape.com/index_lite.ws?player=jimmy возвращает мне 404. – cletus

5

Организуйте свой код читаемым способом. Это поможет вам во время разработки. Разделение вещей, как показано ниже, вы сможете проверить вещи намного проще, потому что вы можете называть вещи от 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>"); 
     } 
    }); 
} 
Смежные вопросы