Доступ к значению, установленному внутри функции onSuccess в Prototype - PullRequest
0 голосов
/ 07 августа 2009

Я использую Ajax с библиотекой Prototype.

Вот моя функция, которая вызывает функцию Ajax.

function Testfn()
{

    var DateExists = '';

    new Ajax.Request('testurl',{
            method: 'post',
            parameters: {param1:"A", param2:"B", param3:"C"},
            onSuccess: function(response){
            //DateExists = response.responseText;
                            DateExists = 1;
        }
        });
    // I want to access the value set in the onsuccess function here
    alert(DateExists);

}

Когда я предупреждаю значение DateExists, я получаю нулевое значение вместо значения, установленного в функции onsuccess моего вызова Ajax, равного 1. Как это возможно?

Спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

A в AJAX означает асинхронный. Это означает, что как только вы отправляете этот Ajax-запрос, используя new Ajax.Request, запрос отправляется на сервер и немедленно возвращает управление вашему сценарию. Таким образом, alert (DateExists) покажет '', который вы изначально установили.

Чтобы увидеть значение DateExists после возврата из запроса AJAX, необходимо переместить его в метод onSuccess ().

Пример:

function Testfn() {

    var DateExists = '';

    new Ajax.Request('testurl', {
      method: 'post',
      parameters: {param1:"A", param2:"B", param3:"C"},
      onSuccess: function(response){
        DateExists = response.responseText;
        alert(DateExists);
      }
    });
}
1 голос
/ 07 августа 2009

Обратный вызов onSuccess выполняется асинхронно, когда заканчивается запрос JAX A , поэтому предупреждение вызывает до обратного вызова.

Вы должны работать с вашим ответом, внутри обратного вызова или, если хотите, сделать другую функцию:

new Ajax.Request('testurl',{
            method: 'post',
            parameters: {param1:"A", param2:"B", param3:"C"},
            onSuccess: function(response){
                        var dateExists = response.responseText;
                        doWork(dateExists);
                        // or alert(dateExists);
                }
        });

function doWork (data) {
    alert(data);
}
0 голосов
/ 07 августа 2009

CMS абсолютно прав. Решение состоит в том, чтобы вызвать javascript, которому нужен доступ к DateExists из обратного вызова AJAX, например:

function Testfn()
{

  var DateExists = '';

  new Ajax.Request('testurl',{
    method: 'post',
    parameters: {param1:"A", param2:"B", param3:"C"},
    onSuccess: function(response){
      //DateExists = response.responseText;
      DateExists = 1;
      doTheRestOfMyStuff(DateExists);
    }
  });
  // I want to access the value set in the onsuccess function here
  function doTheRestOfMyStuff(DateExists)
  {
    alert(DateExists);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...