jquery中的angularjs拦截器的等价物

我想截取来自REST请求的响应,因为$ httpProvider.interceptors在agularjs中执行: https ://docs.angularjs.org/api/ng/service/ $ http

我正在使用jQuery创建一个非常小的接口,并且不想为此使用angular。 你有想法吗?

实际上我要修复的真正问题与此相同: 在跨域中处理REST响应的301和位置标头

但我想用jquery以同样的方式解决它。

我尝试了这个没有成功:(只捕获0状态永远不会301 …)

如何在事件处理程序之前拦截jQuery中的ajax响应?

为了回答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: 

如果准确地解释OP的问题,那么要求是根据$.ajax()调用返回的statusCode301 )执行任务? ; 在success之前,或者代替successerror回调?

出现在给定响应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) + "
textStatus: " + textStatus + "
statusCode : " + jqxhr.status + "
statusText : " + jqxhr.statusText); }; } } });

jsfiddle http://jsfiddle.net/guest271314/D23k2/

请参阅http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

您可以使用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']