如何返回 AJAX 响应文本?

IT技术 ajax prototypejs javascript
2021-02-05 02:13:01

我使用原型来做我的 AJAX 开发,我使用这样的代码:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
            }
        }
    });
    return result;
}

我发现“结果”是一个空字符串。所以,我试过这个:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                return result;
            }
        }
    });

}

但它也没有奏效。如何获取 responseText 以供其他方法使用?

2个回答

请记住,在 someFunction 完成工作后很久才调用 onComplete。您需要做的是将回调函数作为参数传递给 somefunction。当进程完成工作(即onComplete)时,将调用此函数:

somefunction: function(callback){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                callback(result);
            }
        }
    });

}
somefunction(function(result){
  alert(result);
});
这与停止 javascript 线程相同,不可用。根据我的经验,回调效果更好,代码更有条理(这样,我的代码通常包含许多函数和 5-6 个小调用 :))。
2021-03-10 02:13:01
asynchronous: false 将停止浏览器,直到收到响应。如果网络连接很慢,所以需要几秒钟才能连接到服务器,那么整个浏览器可能会冻结几秒钟,并且不会响应用户输入。这不是很好的可用性。它可能更容易,但表现不佳,因此asynchronous:false永远不应使用
2021-03-12 02:13:01
抱歉,我之前没有真正使用过异步。你是对的,所以这基本上是一样的function ajaxLoader(){var fAjaxLoaded = false;$.ajax(...,success: function(){fAjaxLoaded = true;}); while(fAjaxLoaded);return ...}
2021-03-31 02:13:01
你的回答很棒,更实用/ oop 风格,而且真的非常棒。然而,[某人]-s 的答案是: asynchronous: false 更容易,并且更容易满足作者想要的问题(但您的解决方案更具扩展性和灵活性)。
2021-04-04 02:13:01

在你的代码中添加“asynchronous: false”怎么样?就我而言,它运行良好:)

这违背了 ajax 的目的,对吗?
2021-03-13 02:13:01
这很糟糕,因为对于同步请求,您会阻止浏览器中的所有 JS 执行,直到请求返回。
2021-03-20 02:13:01
达不到目的,但可以挽救您的一天。
2021-04-04 02:13:01