jQuery Ajax和重定向响应从服务器

jQuery Ajax and redirect response from server

本文关键字:服务器 响应 重定向 Ajax jQuery      更新时间:2023-09-26

我有一个情况,我发送jquery ajax post请求,但在我的web应用程序,这个特定的ajax请求的处理程序(处理后的参数),将调用另一个控制器中的一个动作(不确定这是否被称为重定向),基本上呈现整个网站页面(如页面刷新)。但是我注意到浏览器一直显示相同的页面,而不是刷新到新页面的内容。

有什么问题吗?我该如何处理这种情况?

我必须编辑我的问题,因为我改变了ajax调用。

代码是这样的:

function chkSubmit(event, actionType) {

        var msgid = showlst('Please wait ...');
        var data = ''
        if (actionType == 'IAmDone') {
            var letters = 'e,b,c'
            data = 'actionType=' + actionType + '&letters=' + letters;
        } else data = 'actionType=' + actionType;
        $j.ajax({
            type: 'POST',       
            url: context + '/app/handleChk',
            data:  data
        });
        return false;
}

当单击页面上的按钮时,上述函数运行。但是这个页面一直在显示。浏览器调试器显示,它确实收到了来自新操作的200 OK响应,它应该用这个响应来刷新页面。我使用Chrome浏览器和jquery 1.6.1

很抱歉我在代码示例中的打字错误。

服务器无法从ajax请求进行重定向。归根结底,ajax涉及到客户端(浏览器)。如果你想重定向,你可以这样做,但它必须在客户端,在回调中完成。你可以通过从服务器返回一个包含你想要重定向到的url的对象来做到这一点——然后你可以使用javascript来改变文档的location属性。我认为,如果您不是在所有情况下都重定向,或者您的服务器端调用是一个长时间运行的过程,那么这将是有意义的。如果两者都不是,那么ajax调用可能从一开始就没有意义。

我可能误读了您的问题,但是在ajax调用中您的成功回调函数在哪里?这就是你通常将结果呈现到视图的地方,此外,你可以使用错误回调来获取一些数据,如果有什么出错了:

function chkSubmit(event, actionType) {

        var msgid = showlst('Please wait ...');
        var actionType = type // per j. tuskan - looks like no such var in scope
        var data = ''
        if (actionType == 'IAmDone') {
            var letters = 'e,b,c'
            data = 'actionType=' + actionType + '&letters=' + letters;
        } else data = 'actionType=' + actionType;
        $j.ajax({
            type: 'POST',       
            url: context + '/app/handleChk',
            data:  data,
            success:function(the_data){
              alert("Now I can do stuff with the ajax response which is: "+the_data);
            }
        });
        return false;
}

@ek_ny所说的例子。

jQuery.ajaxSetup({
    complete: function (request, textStatus) {
        // header inserted manually on the server.
        // you should block the automatic redirect headers 
        // inserted by the server.
        var location = request.getResponseHeader("Location");
        if(location) window.location = location; 
    }
});

您不能使用Ajax进行服务器端重定向,因为无论何时使用Ajax,响应都会到达Ajax的成功/错误函数。你可以在JavaScript中使用form来实现服务器端重定向。