Пустое оповещение изменяет поведение функции - PullRequest
0 голосов
/ 05 марта 2012

У меня самая странная ошибка, моя функция Javascript ведет себя по-разному, в зависимости от того, настроено ли предупреждение на конкретную строку.

В основном код выглядит так:

var friendsHtml = 'Error String';
$.get("url", function(xml){
    $(xml).find('friend').each(function(){
        friendsHtml = 'html stuff';
    });
});
var div = '<div>'+friendsHtml+'</div>';
$("#friends_window").html(div);

Который всегда будет отображать строку ошибки, а не строку HTML.Но когда я добавляю пустое предупреждение в эту строку, все работает просто отлично:

var friendsHtml = 'Error String';
$.get("url", function(xml){
    $(xml).find('friend').each(function(){
        friendsHtml = 'html stuff';
    });
});
alert("");
var div = '<div>'+friendsHtml+'</div>';
$("#friends_window").html(div);

Я действительно не понимаю.

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

alert блокирует («ставит на паузу») выполнение функции, но не AJAX-запрос.

Таким образом, когда вы нажимаете «OK», чтобы закрыть диалоговое окно с предупреждением, запрос может быть завершени переменная friendsHtml затем изменяется методом обратного вызова в jQuery.get.

A визуализация:

// Case 1
var friendsHtml = 'Error String';
< sending AJAX request... >
var div = '<div>'+friendsHtml+'</div>';  // <AJAX request hasn't finished yet
                                         // so "Error String" is printed.
// Case 2:
...
< sending AJAX request >
alert("");                           // <-- Blocks execution
                                     // Meanwhile, AJAX request finishes
                                     // and changes friendsHtml to "html stuff"
< User dismisses dialog, and the execution is resumed >
var div = '<div>'+friendsHtml+'</div>'; // <-- "html stuff"
0 голосов
/ 05 марта 2012

Я думаю, что происходит то, что div обновляется до того, как $.get() может завершиться.Вы можете поместить код обновления div в функцию обратного вызова для $.get().Возможно, вам придется выполнить дополнительную проверку ошибок внутри обратного вызова, чтобы убедиться, что ваш $(xml).find() возвращает то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...