如何解决jquery.post:如何接受来自服务器的重定向?
| 我正在Ruby On Rails应用程序中使用JQuery尝试使用不引人注意的JS。 用户填写表单后,客户端JQuery代码将调用:$.post(\"/premises\",ui.form)
我可以看到POST击中了服务器,并且可以看到服务器将重定向通知发送到http:// localhost:3000 / users / 42,其中包含要显示的数据。
但是浏览器页面不会改变。这真的不令我感到惊讶-客户端javascript的全部目的是控制要更新的内容-我明白了。但是在这种情况下,无论服务器响应什么,我都想兑现。
我尝试根据jQuery Ajax调用后如何管理重定向请求将调用扩展到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是未定义的。我怀疑真正的答案很简单,对吧?期待它!
解决方法
您引用的帖子使用JSON作为返回值,并且正在服务器端构造该json。这意味着如果有重定向,您的数据对象将看起来像
{redirect:\'redirecturl.html\'}
如果不是重定向,那么数据对象将像
{form:html-string-for-form}
现在的工作是在服务器端相应地构造json对象
,服务器说要使用JavaScript处理的数据可通过其他URL获得,而不是浏览器应将新文档加载到顶层框架中。将浏览器发送到被告知使用JS请求数据的URL不会遵循重定向。
如果要执行此操作,则服务器应以JavaScript解释为响应的数据(在响应的正文中)作为将新值分配给“ 4”的原因。
,data.redirect可能未定义,因为您没有在服务器端指定它。在您得到的答案中,无论结果如何,服务器总是以200响应,然后它发回的JSON主体确定客户端的反应。因此,在服务器端,您需要回答{\"redirect\" : \"/where/to/go\"}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。