Синтаксический сахар к функции Ajax прототипа - PullRequest
0 голосов
/ 25 декабря 2010

Я хотел бы создать синтаксический сахар для Ajax.Response().

Как это:

AjaxGet = function(url) {
  ar = new Ajax.Request(url,
       { onSuccess: function(transport) {
             alert(transport.responseText);
             return transport.responseText;
          }
       });
  return ar.responseText;
}

Так что

title = AjaxGet('/favouriteMovie?horrors=true')

будет хранить в title переменную результата запроса Ajax. Но код функции выше не работает, не возвращает responseText

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Вы можете сделать это, только если вы используете синхронный Ajax, который вы никогда не должны .Пользовательский интерфейс всего браузера перестанет отвечать на запросы, которые вы никак не можете предсказать.

Так что лучшее, что вы можете сделать, - это обратный вызов некоторого вида:

function AjaxGet(url, callback) {
  new Ajax.Request(url, {
    onSuccess: function(xhr){ callback(xhr.responseText) }
  });
}

Существуют проблемы с этим подходом, однако:

  1. Это не позволит вам обрабатывать типы содержимого XML.
  2. Вы не сможете установить пользовательские заголовки.
  3. Вы не сможете справиться с какими-либо ошибками.

По этим причинам я рекомендую использовать полный Ajax.Request всякий раз, когда вам это нужно.

1 голос
/ 25 декабря 2010

Это проблема асинхронного вызова ajax.проще было бы указать асинхронный: false в вашем вызове Ajax.Get.Например:

AjaxGet = function(url) {
  ar = new Ajax.Request(url,
       { onSuccess: function(transport) {
             alert(transport.responseText);
             return transport.responseText;
          },
         asynchronous: false
       });
  return ar.responseText;
}

Однако я предлагаю сохранить асинхронную функциональность запросов, а затем при необходимости настроить функции обратного вызова функции Success.

...