无法获得AngularJS的$ http来执行跨域请求,例如jQuery" ajax"

时间:2016-07-08 18:02:25

标签: javascript jquery angularjs xmlhttprequest cors

我需要使用来自第三方的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

1 个答案:

答案 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);