jquery.post():我如何兑现服务器的重定向?

时间:2011-04-13 20:04:15

标签: javascript jquery ruby-on-rails unobtrusive-javascript

我正在尝试不引人注目的JS,在我的Ruby On Rails应用程序中使用JQuery。

用户填写表单后,客户端JQuery代码调用:

$.post("/premises", ui.form)

我可以看到POST命中服务器,我可以看到服务器向http://localhost:3000/users/42发出重定向通知,并附上要显示的数据。

但浏览器页面不会改变。这并不让我感到惊讶 - 客户端javascript的重点是控制更新的内容 - 我明白了。但在这种情况下,我想尊重服务器回复的内容。

我尝试根据How to manage a redirect request after a jQuery Ajax call将调用扩展到post():

$.post("/premises", 
       ui.item,  
       function(data, textStatus) {
           if (data.redirect) {
               // data.redirect contains the string URL to redirect to
               window.location.href = data.redirect;
           } else {
               // data.form contains the HTML for the replacement form
               $("#myform").replaceWith(data.form);
           }
       });

...但(除其他问题外)data.redirect未定义。我怀疑真正的答案很简单,对吧?期待它!

3 个答案:

答案 0 :(得分:1)

您引用的帖子使用JSON作为返回值,它正在服务器端构建json。这意味着如果有重定向您的数据对象将是

{redirect:'redirecturl.html'}

如果它不是重定向,那么数据对象就像

{form:html-string-for-form}

现在的工作是在服务器端相应地构建json对象

答案 1 :(得分:0)

服务器说您要使用JavaScript处理的数据可以在不同的URL上使用,而不是浏览器应该将新文档加载到顶级框架中。将浏览器发送到它被告知JS请求的数据的URL将不会遵循重定向。

如果你想这样做,那么服务器应该响应JavaScript解释的数据(在响应的正文中)作为向location分配新值的理由。

答案 2 :(得分:0)

data.redirect可能未定义,因为您没有在服务器端指定它。在答案中你指出的是,无论结果如何,服务器始终以200响应,然后它发送回的JSON主体确定客户端的反应方式。因此,在服务器端,您需要回复{"redirect" : "/where/to/go"}