Ajax success не устанавливает значение переменной - PullRequest
0 голосов
/ 21 мая 2019

У меня есть простой вызов ajax для одного из моих представлений.

var countAnchors;

$.ajax({
    url: countUrl,
    method: "GET",
    data: @Model.InitialTrainingId,
    success: function (result) {
        console.log("result: ",result);
        countAnchors = result;
    },
    error: function (jqXHR) {
        console.log(jqXHR);
        alert("There was a problem");
    }
});

console.log("countAnchors: ",countAnchors);

Когда я запускаю это, в консоли я вижу:

enter image description here

Почему countAnchors не присваивается значение в функции успеха?

Ответы [ 3 ]

2 голосов
/ 21 мая 2019

Вы можете сделать function, поэтому при получении ответа вы можете присвоить значение вашему variable, как показано ниже:

var countAnchors=null;

  function result(r){
    countAnchors= r;//assigning value return
   console.log("countAnchors: ",countAnchors);
  }

    $.ajax({  
        type: "POST",  
        url: "readString.php",  
        data: { 'fn': filename },      
        success: function(response){
            result(response); //calling function
        },
       error: function (jqXHR) {
       console.log(jqXHR);
       alert("There was a problem");
      }
    }); 
0 голосов
/ 21 мая 2019

Ваши записи в журнале подсказывают вам.

Если не указано иное, вызовы ajax будут выполняться асинхронно.

В этом случае в журнале вы видите, что регистрация значения countAnchors происходит до завершения вызова ajax. Тот факт, что он был написан ранее в блоке сценария, не означает (в данном случае), что он завершен до выполнения следующей части блока сценария.

Бьюсь об заклад, это даст вам значение и вернет две строки в журнал консоли в ожидаемом порядке:

var countAnchors;

$.ajax({
    url: countUrl,
    method: "GET",
    data: @Model.InitialTrainingId,
    success: function (result) {
        console.log("result: ",result);
        countAnchors = result;
        console.log("countAnchors: ",countAnchors);
        doSomething();
    },
    error: function (jqXHR) {
        console.log(jqXHR);
        alert("There was a problem");
    }
});

function doSomething()
{
    alert('countAnchors: ' + countAnchors);
}

РЕДАКТИРОВАТЬ: Если вам нужно сделать что-то со значением countAnchors, создайте новую функцию javascript и вызовите ее из функции успеха после установки countAnchors.

0 голосов
/ 21 мая 2019

Потому что

console.log("countAnchors: ",countAnchors);

выполняется до успеха, и в это время countAnchors все еще не определено

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