我正在尝试不引人注目的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未定义。我怀疑真正的答案很简单,对吧?期待它!
答案 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"}