Javascript 从ajax请求向另一个函数返回值
我试图从(传输)返回一个值到调用函数,但似乎无法使其工作:Javascript 从ajax请求向另一个函数返回值,javascript,ajax,prototypejs,Javascript,Ajax,Prototypejs,我试图从(传输)返回一个值到调用函数,但似乎无法使其工作: function createXMLHttpRequest( w ) { var urly = '/users/notes/' + w; var options = { method:'get' , onSuccess: function( transport ) { x = transport.responseText; return x; }
function createXMLHttpRequest( w )
{
var urly = '/users/notes/' + w;
var options = {
method:'get'
, onSuccess: function( transport )
{
x = transport.responseText;
return x;
}
, onFailure: function( transport )
{
var response = transport.responseText;
alert( "FAILED "+ response );
}
};
new Ajax.Request( urly, options );
alert( x );
}
var ai = $( 'addItem' );
ai.onclick = function()
{
// -1 indicates new
addnote( -1, null );
}
x
始终未定义警报。除非我将x
分配给Ajax.Request
例如x=newajax.Request(urly,options)
。然后它将发出警报[Object Object]
。如何将transport.responseText
的值返回到onclick
函数?您的请求不是异步:false
。因此,在请求完成之前会向x发出警报,x
设置为transport.responseText
您必须将请求设置为同步,或在onSuccess
方法中发出警报x
来自onSuccess的返回值被Ajax.Request丢弃。不要退回任何东西
Ajax本质上是异步的。您应该查询服务器,然后在回调中处理响应。因此,您不应该尝试在onclick函数中使用服务器值,而应该在单独的回调(onSuccess方法)中使用服务器值。您的请求不是
异步的:false
。因此,在请求完成之前会向x发出警报,x
设置为transport.responseText
您必须将请求设置为同步,或在onSuccess
方法中发出警报x
来自onSuccess的返回值被Ajax.Request丢弃。不要退回任何东西
Ajax本质上是异步的。您应该查询服务器,然后在回调中处理响应。因此,您不应该尝试在onclick函数中使用服务器值,而应该在单独的回调(onSuccess方法)中使用服务器值。这是错误的
在进行ajax调用时,您应该忘记考虑同步,而是考虑异步!
将请求发送到某个url,并发送一个回调函数,该函数将在请求返回某些数据时执行
我为GET调用编写了简单的包装器
// AJAX WRAPPER
MYPROJECT = {};
MYPROJECT.Ajax = (function() {
return{
// get data by AJAX call and return as plain text
get:function(url, callback) {
new Ajax.Request(url, {
method: 'get',
onSuccess: function(transport) {
var data = transport.responseText.evalJSON();
callback(data);
}
});
}
}
})();
// USAGE
MYPROJECT.Ajax.get('/ajax_json_echo/?foo=bar',function(data){
alert(data);
$('containerText').innerHTML = data.get_response.foo
});
您可以在这里看到正在运行的代码
(请耐心等待,警报框应在2秒钟后出现)这完全是错误的
在进行ajax调用时,您应该忘记考虑同步,而是考虑异步!
将请求发送到某个url,并发送一个回调函数,该函数将在请求返回某些数据时执行
我为GET调用编写了简单的包装器
// AJAX WRAPPER
MYPROJECT = {};
MYPROJECT.Ajax = (function() {
return{
// get data by AJAX call and return as plain text
get:function(url, callback) {
new Ajax.Request(url, {
method: 'get',
onSuccess: function(transport) {
var data = transport.responseText.evalJSON();
callback(data);
}
});
}
}
})();
// USAGE
MYPROJECT.Ajax.get('/ajax_json_echo/?foo=bar',function(data){
alert(data);
$('containerText').innerHTML = data.get_response.foo
});
您可以在这里看到正在运行的代码
(请耐心等待,警报框应在2秒钟后出现)Saweet。谢谢文档中说:“既然同步使用相当令人不安,而且通常味道不好,你应该避免改变它。说真的。”为什么它会令人不安,而且味道不好?这仅仅是因为它不是真正的ajax吗?它不仅仅是炒作。使请求同步将减慢您的UI速度,并且您的js线程可能会被某些net failure.Saweet阻塞。谢谢文档中说:“既然同步使用相当令人不安,而且通常味道不好,你应该避免改变它。说真的。”为什么它会令人不安,而且味道不好?这仅仅是因为它不是真正的ajax吗?它不仅仅是炒作。使请求同步将减慢您的UI速度,并且您的js线程可能会被某些网络故障阻塞。