2014-12-17 8 views
5

Ich versuche, einen POST-Aufruf von einem JavaScript-Client an eine foursquare-API namens addvenue zu senden. Dies ist der API-Endpunkt documentation link.
Aber der Server gibt 405 zurück - Methode nicht erlaubt. Hier ist das Snippet, das den Anruf ausführt

var postdata = {'oauth_token':$scope.access_token_foursquare, 
         'v':'20141217','name':'randomlisting', 
         'll':'44.3,37.2','m':'foursquare'}; 
var req = { 
      method: 'POST', 
      url: 'https://api.foursquare.com/v2/venues/add', 
      headers: { 
       'content-type': 'application/x-www-form-urlencoded' 
      }, 
      data: postdata 
      } 

$http(req).then(function(response){ 
     console.log(response); 
      }); 

folgend ist das Anfrage- und das Antwortpaket für den obigen Aufruf.

Remote Address:103.245.222.185:443 
Request URL:https://api.foursquare.com/v2/venues/add 
Request Method:OPTIONS 
Status Code:405 Method Not Allowed 

**Request Headers** 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, authorization, content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:api.foursquare.com 
Origin:http://localhost:9000 
Referer:http://localhost:9000/foursquare 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 

**Response Headers** 

Accept-Ranges:bytes 
Access-Control-Allow-Origin:* 
Connection:Keep-Alive 
Content-Length:90 
Content-Type:application/json; charset=utf-8 
Date:Wed, 17 Dec 2014 12:15:15 GMT 
Keep-Alive:timeout=10, max=50 
Server:nginx 
Tracer-Time:1 
Via:1.1 varnish 
X-Cache:MISS 
X-Cache-Hits:0 
X-Served-By:cache-sn87-SIN 

Ich studierte auch über CORS Problem. In meinem Fall erlaubt der Server alle Ursprünge, wie in den Antwortheadern zu sehen ist. Ich bin von diesem Problem betroffen und konnte nicht weiter vorgehen.

Jede Hilfe wäre willkommen. Vielen Dank im Voraus.

+0

Diese Art von Frage jeden Tag stattfindet, vielleicht wird dies hilfreich: http://stackoverflow.com/questions/19554414/angularjs-disabling-cors – Rasalom

+0

Vielen Dank für die sofortige Antwort. Ich habe Folgendes versucht, wie in dem von Ihnen angegebenen Link erwähnt. 'angular.module ('yourModuleHere') .config (function ($ httpProvider) { löschen $ httpProvider.defaults.headers.common ['X-Requested-With']; });' Immer noch das gleiche Problem. – bala

+0

Haben Sie die Lösung gefunden, teilen Sie sie bitte – MohQut

Antwort

1

anfordern Methode: OPTIONS

Der Kunde macht einen Pre-Flight-OPTIONS auf dem Server anfordern.

Eine OPTIONS-Anfrage wird automatisch vom Browser gestellt, bevor eine nicht-einfache (z. B. keine GET) Cross-Domain-Anfrage (CORS) durchgeführt wird.

Der Zweck der OPTIONS-Anfrage ist eine schnelle Überprüfung mit dem Server, um sicherzustellen, dass der Client den POST machen darf, bevor er den POST tatsächlich ausführt. So macht der Client 1 oder 2 Anfragen.

Eine OPTIONS-Anfrage und wenn die OPTIONS-Anfrage mit Erfolg (nicht eine 405) antwortet, dann machen Sie den POST.

Die OPTIONS-Anfrage schlägt am wahrscheinlichsten fehl, weil Sie in Ihrer Serverantwort nicht angegeben haben, dass Ihr Server OPTIONS-Anfragen unterstützt.

diesen Header an den Server-Antwort hinzu ..

Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS 

dann sollte es funktionieren.

Siehe https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests für weitere Informationen

Verwandte Themen