[英]Equivalent of angularjs interceptor in jquery
我想截取来自REST请求的响应,因为$ httpProvider.interceptors在agularjs中执行: https ://docs.angularjs.org/api/ng/service/ $ http
我正在使用jQuery创建一个非常小的接口,并且不想为此使用angular。 你有想法吗?
实际上我要修复的真正问题与此相同: 在跨域处理REST响应的301和位置标头
但我想用jquery以同样的方式解决它。
我尝试了这个没有成功:(只抓到0状态永远不会301 ...)
为了回答V31,我这样做了:
$.ajaxSetup({
error: function(jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 301) {
alert("Element not found.");
} else {
console.log(jqXHR.status);
console.log("Error: " + textStatus + ": " + errorThrown);
}
}
});
这是我的控制台:
哪个说:
XMLHttpRequest cannot load *******. The request was redirected to '**************', which is disallowed for cross-origin requests that require preflight.
0
Error: error:
您可以使用ajaxSetup来捕获301错误,如下所示:
$.ajaxSetup({
error : function(jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 0) {
alert("Element not found.");
} else {
alert("Error: " + textStatus + ": " + errorThrown);
}
}
});
有关jquery ajax设置的更多信息
更新:
要处理CORS问题,您需要启用跨域调用,如下所示:
var app = angular.module('myApp', []);
app.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
//Remove the header used to identify ajax call that would prevent CORS from working
delete $httpProvider.defaults.headers.common['X-Requested-With'];
});
正如您所提到的,服务器端代码不在您手中,您需要向该方提出请求,以便在API调用的响应中包含这些标头(如果尚未完成)
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => ['OPTIONS', 'GET', 'POST']
如果准确地解释OP的问题,那么要求是基于从$.ajax()
调用返回的statusCode
( 301
)执行任务? ; 在success
之前,或者代替success
, error
回调?
出现在给定响应statusCode
之后OP发生error
回调。 下面的部分应该在任何success
之前调用statusCode
回调,可以附加到$.ajax()
error
回调。
尝试
$.ajaxSetup({
statusCode: {
301: function (data, textStatus, jqxhr) {
var callback = function (name) {
$("#results").html(name)
};
if (jqxhr.status === 301) {
// do stuff
alert(jqxhr.readyState, jqxhr.getAllResponseHeaders());
callback("response: " + String(data || jqxhr.responseText)
+ "<br />textStatus: " + textStatus
+ "<br />statusCode : " + jqxhr.status
+ "<br />statusText : " + jqxhr.statusText);
};
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.