Member 12893295 Ответов: 1

Значение получает null после вызова ajax и сохраняется в глобальной переменной


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

Что я уже пробовал:

Var tmp=null;

function Fn()
{
var PlantName = function () {
                        var dataPlantName = $.Deferred();
                        $.ajax({
                            type: "POST",
                            contentType: "application/json; charset=utf-8",
                            url: "WebService1.asmx/GetPlantMapName",
                            dataType: "json"
                        }).done(function (response) {
                            //console.log(response.d);
                            dataPlantName.resolve(response.d.data);
                            tmp = response.d.data;                            
                        });
                        return dataPlantName.promise();
                    } ();

alert(tmp);
};

F-ES Sitecore

Он сохраняется, проблема в том, что ваше предупреждение запускается до того, как переменная tmp установлена. вызовы ajax происходят в фоновом режиме, пока ваш код продолжает работать, поэтому ваш код не останавливается на $.ajax, ожидая события done, вместо этого он продолжает работать, так что ваше предупреждение пусто.

Если вы хотите, чтобы что-то произошло, когда переменная tmp установлена, то напишите этот код в событии done.

Member 12893295

Спасибо, что он работает на меня.

1 Ответов

Рейтинг:
4

Karthik_Mahalingam

добавлять

async:false

относиться на jQuery."Аякс" () | библиотека jQuery API документация[^]


Member 12893295

Есть и ошибки, как синхронные запросы XMLHttpRequest в основной нити является устаревшим из-за его губительного воздействия на восприятие конечного пользователя

Karthik_Mahalingam

это предупреждение, а не ошибка
какую версию jquery вы используете?

Member 12893295

jquery-1.12.4.js на самом деле у меня есть ajax-вызов внутри ajax-вызова, так что async =false settitng повлияет на другой ajax-вызов????

Karthik_Mahalingam

попробуй вот так

$.ajax({
    type: "POST",
    url: "WebService1.asmx/GetPlantMapName",
    contentType: "application/json; charset=utf-8", 
    dataType: "json",
    async: true,
    success: function (result) {
    }
});