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

时间:2011-07-07 13:20:36

标签: javascript jquery ajax

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

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

我不得不编辑我的问题,因为我改变了我的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

很抱歉我的代码示例中的拼写错误。我纠正了它。

4 个答案:

答案 0 :(得分:11)

服务器无法从ajax请求进行重定向。最后,ajax涉及客户端(浏览器)。如果你想重定向你可以做到,但它必须在客户端,在回调中完成。您可以通过从包含要重定向到的URL的服务器返回一个对象来实现这一点 - 然后您可以使用javascript来更改文档的位置属性。我认为如果你没有在所有情况下重定向,或者你的服务器端调用是一个长时间运行的过程,这将是有意义的。如果不是这种情况,那么ajax调用可能首先没有意义。

答案 1 :(得分:2)

我可能会误解你的问题,但是你在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;
}

答案 2 :(得分:2)

@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; 
    }
});

答案 3 :(得分:0)

您不能使用Ajax进行服务器端重定向,因为每当您使用Ajax时,响应都会响应Ajax的成功/错误功能。您可以使用JavaScript中的“表单”进行服务器端重定向。