我硬是在網上淘想辦法找到後我的數據,以正確的方法服務器使用AngularJS。
當我用Angular JS做了一個$ http POST請求時,它將我的數據發佈到服務器,但失敗並顯示錯誤消息「Origin http://localhost:8000
不被Access-Control-Allow-Origin允許」,如果我嘗試它以「文件:///」,結果還是一樣。
我想互聯網上提到的所有補救措施,包括
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
,跟着大多數指令在此article 但他們沒有爲我工作。
我還設置服務器端方法Access-Control-Allow-Origin: *
和access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, access_token, Origin, X-Requested-With, Content-Type, Accept, access_token
,但我仍然得到同樣的錯誤,下面是我的代碼
var URL = "https://myURL";
var app = angular.module('myApp', []);
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
app.controller('UserController', function($scope, $http){
$scope.user = {};
$scope.createUser = function() {
$http({
url: URL,
data: $scope.user,
method: "POST",
headers: {
"Content-Type": "application/json",
"access_token": "sometoken"
}
}).success(function(response){
$scope.response = response;
alert('ok');
}).error(function(error){
$scope.error = error;
alert('error');
});
}
});
我不知道我做錯了,請幫助我。
編輯:
以下是我的預檢頭
Request URL:https://myURL
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
:host:someapp.appspot.com
:method:OPTIONS
:path:somepath
:scheme:https
:version:HTTP/1.1
accept:*/*
accept-encoding:gzip,deflate,sdch
accept-language:en-US,en;q=0.8
access-control-request-headers:accept, origin, access_token, content-type
access-control-request-method:POST
dnt:1
origin:http://localhost:8000
referer:http://localhost:8000/samplepost.html
user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
Response Headersview source
access-control-allow-headers:Origin, X-Requested-With, Content-Type, Accept, access_token
access-control-allow-origin:*
alternate-protocol:443:quic
content-length:0
content-type:text/html
date:Mon, 16 Sep 2013 17:58:03 GMT
server:Google Frontend
status:200 OK
version:HTTP/1.1
而下面是帖子標題:
Request URL:someURL
Request Headersview source
Accept:application/json, text/plain, */*
access_token:dsfdsfds
Content-Type:application/json
Origin:http://localhost:8000
Referer:http://localhost:8000/samplepost.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
Request Payloadview source
{name:adasds, email:[email protected], phone:325325325, comments:fddsfsdfsd}
comments: "fddsfsdfsd"
email: "[email protected]"
name: "adasds"
phone: "325325325"
Firefox的請求頭和響應頭:
Response Headersview
Access-Control-Allow-Orig... *, *
Alternate-Protocol 443:quic
Cache-Control private
Content-Encoding gzip
Content-Length 136
Content-Type application/json
Date Mon, 16 Sep 2013 18:30:17 GMT
Server Google Frontend
Vary Accept-Encoding
X-Firefox-Spdy 3
access-control-allow-head... Origin, X-Requested-With, Content-Type, Accept, access_token, Origin, X-Requested-With, Content-Type, Accept, access_token
Request Headersview source
Accept application/json, text/plain, */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control no-cache
Connection keep-alive
Content-Length 100
Content-Type application/json; charset=UTF-8
Host someapp.appspot.com
Origin null
Pragma no-cache
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
access_token dsfdsfds
服務器返回什麼?你能否驗證預檢是否正常工作,服務器是否在「OPTIONS」響應和「POST」響應中返回了正確的標題? – TheSharpieOne
@TheSharpieOne添加了OPTIONS和POST'S的響應頭,響應ID爲空 –
POST的響應頭將是最有用的。使用Firebug切換到Firefox以查看它。 Chrome有一個錯誤,如果問題出在它不會顯示。 – TheSharpieOne