如何返回AJAX响应文本?

时间:2009-10-10 03:05:01

标签: javascript ajax

为了更好地组织代码,我不想在我的req.onreadystatechange处理程序中放置回调函数,而是简单地返回数据。

在下面的javascript中,“raw_data”var未定义,因为在ajax响应之前调用了parse_data()函数。

function dostuff(){
   var raw_data = ajax_fetch_data();
   var parsed_data = parse_data(raw_data);
}

在ajax_fetch_data()中的req.onreadystatechange返回数据之前,是否可以不调用parse_data()?

我不喜欢将parse_data()调用嵌套为ajax_fetch_data()中的回调。

2 个答案:

答案 0 :(得分:1)

Ajax中的A意味着“异步”。如果您的调用是异步的,则无法使用类似的返回值。您必须通过回调等待事件。但是,您可以发送如下的同步请求:

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.example.org/', false);
req.send(null);  
if(req.status == 200)  
    return req.responseText;  

其中第二行的false指定同步性质(第三个参数的默认值为true)。

Mozilla Developer Center还有更多内容。

答案 1 :(得分:1)

此代码过于模糊:    var raw_data = ajax_fetch_data();

通常就是这样:

// url = ...
// data = ...
create_ajax_request(url, data, callback);
// This will continue to execute like normal
// ...
// ...
// ...

// Now, in a differnt part of the code:
function callback() {
    // Sometime later, when AJAX returns data, this is called.
}

所以基本上你有两个线程:你“开始”一个请求的主程序,以及在请求完成时调用的回调函数。这仍然忽略了细节。

如果你想要SJAX(同步javascript& xml的一个不好的缩写),那么你可以使用像jQuery这样的东西:

var result = null;
$.ajax({
    aync: false,
    data: data,
    url: url,
    success: function(data) {
        result = data;
    }
});
// result is populated before $.ajax() moves on, so you can use it right after
console.log('result: ' + result);

但是,这会执行忙等待(即,您的浏览器被卡住/锁定,直到数据进入...可能是几毫秒,可能是一分钟,谁知道)。所以这只应该在必要时使用。如果您只想获取数据然后进行处理,请使用回调。

// Call this to start a request
function startRequest() {
    data = ...
    create_ajax_request(url, data, continueRequest);
}

// This is called once we have the data
function continueRequest(data) {
    alert(data);
}

这是更典型的AJAX程序。