我需要使用来自第三方的API,他们向我发送了一个测试html
文件供我使用。我在浏览器中打开文件,如下所示:file///...
并且可以通过按下触发jQuery
代码的按钮来成功执行请求。他们正在使用jQuery
这样:
$.ajaxSetup({
xhrFields: {
withCredentials: true
},
crossDomain: true,
});
$.ajax({
beforeSend : function(xhr){
xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
},
async:true,
url : loginUrl,
method : 'post',
//cache : false,
contentType: 'application/x-www-form-urlencoded',
data : data,
processData: true,
success : loginHandle,
error : loginError
});
我在AngularJS中尝试这个没有运气:
...
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
...
return $http.post(host+'/admin/login', {data: credentials})
.then(complete)
.catch(failed);
我收到此错误:
XMLHttpRequest cannot load http://x.x.x.x:8080/admin/login. Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains the invalid value 'null'. Origin 'http://example.com' is therefore not allowed access.`
他们的Access-Control-Allow-Origin
设置为null
,其请求标头的Origin
也设置为null
。
我有什么方法可以让这项工作至少用于测试目的吗?我查看了$http.jsonp
,但它似乎不支持POST
数据。
修改
我刚刚在AngularJS文件中使用了他们的$.ajax
代码并且它可以工作,但只能使用下面提到的Chome CORS插件。我想当html
文件在浏览器中file:///
运行时,原点会自动设置为null
。
答案 0 :(得分:0)
这最终适用于Chrome CORS插件,请注意$.param
功能。
return $http({
url: host+'/admin/login',
data: $.param(credentials),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
},
method: 'POST'
})
.then(complete)
.catch(failed);