在jQuery中检测redirect$ .ajax?
我想使用jQuery来获取一个URL,并明确检查它是否响应302redirect,但不遵循redirect。
jQuery的$.ajax
似乎总是遵循redirect。 我怎样才能防止这种情况,并看到没有遵循它的redirect?
有像“jquery ajaxredirect”这样的标题有各种各样的问题,但他们似乎都涉及到实现其他目标,而不是直接检查服务器给出的状态。
AJAX请求从来没有机会不遵循redirect(即它必须遵循redirect)。 更多的信息可以在这个答案中findhttps://stackoverflow.com/a/2573589/965648
欢迎来到未来!
现在我们有一个来自xhr对象的“responseURL”属性。 好极了!
请参阅如何获取XMLHttpRequest中的响应URL?
但是,jQuery(至less1.7.1)不直接访问XMLHttpRequest对象。 你可以使用这样的东西:
var xhr; var _orgAjax = jQuery.ajaxSettings.xhr; jQuery.ajaxSettings.xhr = function () { xhr = _orgAjax(); return xhr; }; jQuery.ajax('http://test.com', { success: function(responseText) { console.log('responseURL:', xhr.responseURL, 'responseText:', responseText); } });
这不是一个干净的解决scheme,我想jQuery团队将在未来的版本中为responseURL做些什么。
提示 :将原始url与responseUrl进行比较。 如果它是相等的,那么不会有redirect。 如果它是“未定义”,则可能不支持responseUrl。 但是正如Nick Garvey所说,AJAX请求从来没有机会不遵循redirect,但是你可以通过使用responseUrl属性来解决一些任务。
jQuery在浏览器的JavaScript引擎的范围内运行。 通过javascript或html元素(链接,脚本,图像,audio或video等)请求的每个资源都受到httpredirect的约束。 不幸的是没有办法让JavaScript以您需要的方式访问低级http。
非常抱歉,答案是否定的。
虽然回答这个问题的其他人(可惜)是正确的,这些信息是由浏览器隐藏的,我想我会发布一个解决scheme,我想出了:
我configuration了我的服务器应用程序来设置一个自定义响应头( X-Response-Url
)包含请求的url。 每当我的ajax代码收到一个响应,它会检查是否xhr.getResponseHeader("x-response-url")
,在这种情况下,它将它与通过$.ajax()
原来请求的url进行比较。 如果string不同,我知道有一个redirect,此外,我们实际上到达了什么url。
这有一个缺点,就是需要一些服务器端的帮助,而且如果在往返过程中url被引入(由于引用/编码问题等),也可能会崩溃…但是对于99%的情况,这似乎得到工作完成。
在服务器端,我的具体情况是使用Pyramid web框架的python应用程序,我使用了以下代码片段:
import pyramid.events @pyramid.events.subscriber(pyramid.events.NewResponse) def set_response_header(event): request = event.request if request.is_xhr: event.response.headers['X-Response-URL'] = request.url
$.ajax({ type: "POST", url: "http://arudhrainnovations.com/android/testregister.php", data: dataString, dataType: "json", cache: false, success: function(result){ alert(result); } } if (result.success==1) { windows.locations = "index.html"; return; }
在来自活动服务器的json响应之后redirect文件。 检查respon标签success ==1
并把下面的代码redirect。
windows.locations =“index.html”;
请通过contact@arudhrainnovations.com告诉我更多详情
- 在Chrome扩展中的跨源XMLHttpRequest
- 用jQuery ajax响应html更新div
- CORS:当凭证标志为true时,不能在Access-Control-Allow-Origin中使用通配符
- JQuery:当数据参数是数组时,在Ajax请求中'Uncaught TypeError:Illegal invocation'
- validation错误发生后,如何使用PrimeFaces AJAX填充文本字段?
- 指令attr内的callback函数在不同的attr中定义
- login/会话cookie,Ajax和安全
- iOS 6上的Safari缓存$ .ajax结果吗?
- jQuery ajax(jsonp)忽略超时并且不会触发错误事件