Tom*_*lls 13 ajax url jquery post redirect
我在我的Web应用程序中遵循PRG(Post-Redirect-Get)模式,并使用类似以下内容来执行大多数POST:
$.ajax({
type: 'POST',
url: 'A.html',
data: '....',
statusCode: {
302: function() {
alert("302"); // this is never called
},
200: function() {
alert("200");
},
},
success: function (data, textstatus) {
alert('You are now at URL: ' + ??);
},
error: function (data) {
},
complete: function (jqXHR, textstatus) {
alert('You are now at URL: ' + ??);
},
});
Run Code Online (Sandbox Code Playgroud)
我需要在任何重定向发生后获取URL,即.ajax()函数调用的最终GET的URL.例如,对A.html的POST可以重定向到B.html或C.html(总是通过302的).我如何获得最终的URL?
我正在使用jquery 1.5.1,并且使用代理已经见证了jquery正在默默地遵循重定向 - 我很满意.我不关心用302响应的任何URL - 我只想知道.ajax()的"success:"或"complete:"钩子被触发时最终请求的URL.
Tom*_*lls 10
我最后通过在我的所有回复中添加一个额外的标题来解决这个问题(例如"X-MYAPP-PATH:/ Admin/Index").
因此我的javascript可以更改为以下内容:
success: function (data, textstatus, xhrreq) {
alert('You are now at URL: ' + xhrreq.getResponseHeader("X-MYAPP-PATH"));
},
Run Code Online (Sandbox Code Playgroud)
我仍然相信jquery应该能够给我当前的URL,所以我认为这是一个黑客.
小智 5
更好的解决方案是为jQuery的ajax提供一个自定义xhr对象,如下所示:
var xhr = new XMLHttpRequest();
$.ajax({
url: '/url',
type: 'post',
data: '...',
xhr: function() {
return xhr;
}
});
Run Code Online (Sandbox Code Playgroud)
然后您可以在任何回调中访问当前URL
success: function () {
alert('You are now at URL: ' + xhr.responseURL);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13557 次 |
| 最近记录: |