我想为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
答案 0 :(得分:1)
ajax调用是异步的问题。 更简单的修复方法是在Ajax.Get调用中指定asynchronous:false。 E.g:
AjaxGet = function(url) {
ar = new Ajax.Request(url,
{ onSuccess: function(transport) {
alert(transport.responseText);
return transport.responseText;
},
asynchronous: false
});
return ar.responseText;
}
但是我建议保留请求的异步功能,然后根据需要调整Success函数回调。
答案 1 :(得分:1)
只有使用同步Ajax才能执行此操作,您应该永远不会。整个浏览器的用户界面在请求期间将无法响应,您无法预测。
所以你能做的最好的事情将涉及某种回调:
function AjaxGet(url, callback) {
new Ajax.Request(url, {
onSuccess: function(xhr){ callback(xhr.responseText) }
});
}
但这种方法存在问题:
由于这些原因,我建议您在需要时使用完整的Ajax.Request
。