0

我想为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')

将存储到titleAjax 请求的可变结果。但是上面的函数代码不起作用,不返回responseText

4

2 回答 2

1

ajax 调用是异步的问题。更简单的解决方法是在 Ajax.Get 调用中指定 asynchronous: false 。例如:

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

但是,我建议保留请求的异步功能,然后根据需要调整 Success 函数回调。

于 2010-12-25T17:34:30.100 回答
1

只有在使用同步 Ajax 时才能做到这一点,而您永远不应该这样做。整个浏览器的用户界面将在请求期间变得无响应,这是您无法预测的。

因此,您能做的最好的事情将涉及某种回调:

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

但是,这种方法存在一些问题:

  1. 它不允许您处理 XML 内容类型。
  2. 您将无法设置自定义标题。
  3. 您将无法处理任何类型的错误。

出于这些原因,我建议您Ajax.Request在需要时使用完整的。

于 2010-12-25T17:36:30.413 回答