Почему глобальная переменная Javascript не является глобальной? - PullRequest
1 голос
/ 02 октября 2010

У меня есть обработка внешнего js-файла, удаление некоторого элемента.По результатам я бы определил, нужно ли мне обновить страницу или нет.

var deleted = 0; // first assume not deleted 

$(function() {
    $("#action a.action-delete").click(function() {
        var id = $(this).parent().parent().attr("id");
        $.get("modify-sale.php", { "id" : id, "action" : "delete" }, function (data) { deleted = 1;  }, "text");
        if (deleted) return true; // if success then refresh
        else return false; // else does not refresh
    });

Нет, проблема в том, что я не смог изменить глобальную переменную deleted в обработчике событий jQuery.Я могу заверить, что действие удаления выполнено успешно, но эта переменная просто не меняет свое значение на 1.

Почему?

Ответы [ 2 ]

5 голосов
/ 02 октября 2010

Ajax является асинхронным, поэтому он установит переменную deleted после того, как вы выполните проверку if else.Попробуйте поставить чек в обратном вызове.

0 голосов
/ 02 октября 2010
$("#action a.action-delete").click(function() {
    var id = $(this).parent().parent().attr("id");
    $.ajax({
        "url" :  "modify-sale.php",
        "type" : "GET",
        "data" : { "id" : id, "action" : "delete" },
        "dataType" : "text",
        "async" : false,
        "success" : function(data) {
            if (data == 'success') {
                $("#msg").text("delete success").show();
                $("#msg").fadeOut(1000);
                deleted = 1;
            } else {
                $("#msg").text("delete failed, plesase try later").show();
                $("#msg").fadeOut(5000);
            }
        },
        "error" : function() {
            $("#msg").text("delete failed, please try later").show();
            $("#msg").fadeOut(5000);
        }
    });
    if (deleted) return true;
    else return false;
});

Я исправил это, установив асинхронный синхронизированный.

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