Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 语法糖到原型';s的Ajax函数_Javascript_Ajax_Prototypejs_Syntactic Sugar - Fatal编程技术网

Javascript 语法糖到原型';s的Ajax函数

Javascript 语法糖到原型';s的Ajax函数,javascript,ajax,prototypejs,syntactic-sugar,Javascript,Ajax,Prototypejs,Syntactic Sugar,我想为Ajax.Response()创建语法糖 像这样: AjaxGet = function(url) { ar = new Ajax.Request(url, { onSuccess: function(transport) { alert(transport.responseText); return transport.responseText; } }); return ar.r

我想为
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')
将存储到Ajax请求的变量结果
title

但是上面的函数代码不起作用,没有返回
responseText

这是ajax调用异步的问题。 更容易的修复方法是在Ajax.Get调用中指定asynchronous:false。 例如:


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

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

因此,您所能做的最好包括某种回调:

function AjaxGet(url, callback) {
  new Ajax.Request(url, {
    onSuccess: function(xhr){ callback(xhr.responseText) }
  });
}
不过,这种方法存在一些问题:

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

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

    在我的方法中不使用这种方法似乎非常合理。我将使用Ajax.Request。谢谢同意,保留异步功能是正确的方法。谢谢你的指点!
    function AjaxGet(url, callback) {
      new Ajax.Request(url, {
        onSuccess: function(xhr){ callback(xhr.responseText) }
      });
    }