从ajax请求返回另一个函数的值

时间:2010-03-18 14:16:42

标签: javascript ajax prototypejs

我正在尝试从(传输)向调用函数返回一个值,但似乎无法使其工作:

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=new Ajax.Request(urly,options)。然后它会提醒[Object object]。如何将transport.responseText的值返回onclick函数?

2 个答案:

答案 0 :(得分:3)

您的请求不是asynchronous:false。因此,在请求完成并x设置为transport.responseText之前,会提醒x。

您必须将请求设置为同步,或者在onSuccess方法中设置警告x。

Ajax.Request会丢弃onSuccess的返回值。不要退货。

Ajax本质上是异步的。您应该查询服务器,然后在回调中处理响应。所以你不应该尝试在onclick函数中使用服务器值,而应该在单独的回调中使用(onSuccess方法)。

答案 1 :(得分:0)

这是错的!

在进行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
}); 

您可以在此处查看代码http://jsfiddle.net/wbDhY/1/

(请耐心等待,警告框应在2秒内出现)