Как получить данные из функции JQuery.post - PullRequest
0 голосов
/ 04 августа 2011

Я новичок в JS, но не могу поверить, что не смог понять это ...

myerr определяется глобально. Я установил myerr = на возвращаемое значение из поста. Как только я выхожу за пределы функции, она теряет свое значение.

myerr="";
$.post("/rpc/validate_song_entry", {'title':$('#title').val()}, function(data){
  alert(data.title); //----> Alerts expected result.
  myerr=data.title;
  alert(myerr); //-----> Alerts expected result.
}, "json");
alert(myerr); //-------> Nothing. Blank dialog.

Мне кажется, это проблема переменной области, но я не понимаю, как ...

Edit: Я разместил это ниже, но не знаю, как удалить это ... Теперь я понимаю, что пост выполняется асинхронно. Это имеет смысл. Что не имеет смысла, так это то, что оповещения всплывают в том порядке, который вы видите. Я ожидаю, что последнее предупреждение (пустое) появится первым. Это не. Похоже, последний.

Я ожидаю, что оповещения внутри почтовой функции появятся последними. Кто-нибудь может объяснить это?

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

вам необходимо использовать jQuery.ajax и вам нужно установить async :false

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

myerr="";

    $.ajax({
          url:  "/rpc/validate_song_entry",
          type: "POST",
          data: {'title':$('#title').val()},
          async:false,
          success: function(data){
             myerr=data.title;
          }
       }
    );

alert(myerr);
1 голос
/ 04 августа 2011

Это потому, что сообщение сделано асинхронно .Вам нужно будет использовать $ .ajax для вашей проблемы и установить его на асинхронный.

// edit: Также посмотрите на это: Использование $ .post в функции javascript, не может присвоить значениек переменной?

0 голосов
/ 04 августа 2011
Функция

внутри $ .post (...) выполняется ПОСЛЕ того, как она выполняется асинхронно. Ваше оповещение (myerr) выполняется сразу до того, как было установлено myerr.

...