2011-01-11 5 views
7

Ich explizit angeben, ein POST und ich sehe nicht die Post-Daten in der Anfrage und mehr über gibt es eine OPTIONEN.JQuery POST-Anfrage wird in OPTIONS umgewandelt. Warum?

Die Antwort sollte ein HTML sein, das übereinstimmende Benutzer mit Abfrage im Tabellenformat angibt. Ich versuche, den HTML-Code zu posten und zu lesen, um ein Auto-Complete-Eingabefeld zu erstellen.

dies der JQuery-Code:

$.post('https://internal.company.com/data/displayUserList', 
    { Email: "", Name: "%GEORGE%"}, 
    function(responseText, textStatus) { 
     console.log("Response:\n" + responseText + textStatus) 
    } 
); 

Anfrage erfasst von FireBug1.6.1 (Firefox)

OPTIONS /data/displayUserList HTTP/1.1 
Host: internal.company.com 
User-Agent: Mozilla/5.0 Firefox/3.6.8 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Origin: null 
Access-Control-Request-Method: POST 
+0

Es gibt viele damit in Zusammenhang stehende Fragen in jQuery auf SE. Siehe "Related" Mögliche Lösung werden hier diskutiert: http://StackOverflow.com/Questions/2699277/Post-Data-To-Jsonp – OneWorld

Antwort

10

Dies könnte passieren, wenn Sie die same origin policy Einschränkung verletzen. Der Anforderungskopf Access-Control-Request-Method lässt mich denken, dass dies der Fall ist. Ich sehe, dass Sie eine vollständige Adresse https://internal.company.com/data/displayUserList in Ihrer Post-Anfrage angeben. Stellen Sie sicher, dass die Seite, die dieses Skript hostet, auch von https://internal.company.com stammt. Am besten wäre es, eine relative Adresse zu verwenden:

$.post('/data/displayUserList', { Email: "", Name: "%GEORGE%" }, 
    function(responseText, textStatus) { 
     console.log("Response:\n" + responseText + textStatus); 
    } 
); 
+0

Ja. Ich versuche, die URL auf einer anderen Webseite zu posten, aber dort ist die Top-Domain gleich "company.com", ich werde prüfen, ob "document.domain" gleich ist. Außerdem habe ich festgestellt, dass einige Cookie-Informationen gesendet werden, wenn "https://internal.company.com/data/displayUserList" vom Browser ausgelöst wird. Gibt es einen Weg, wie ich sie erfassen und mit dieser Anfrage senden könnte? – hashg

+0

Ist das Protokoll das gleiche? Beachten Sie, dass HTTP und HTTPS dieselbe Herkunftsrichtlinie verletzen. Soweit Cookies betroffen sind, werden sie automatisch an die AJAX-Anfrage gesendet, wenn diese Cookies mit einer Domain-Eigenschaft, die der Top-Domain entspricht, festgelegt wurden, so dass sie zwischen diesen Domains geteilt werden können. –

+0

Ja, Protokoll ist HTTPS. Mir ist aufgefallen, dass Cookies abgesehen vom OPTIONS-Problem nicht abgeholt werden. Sollte ich etwas im Anruf ändern? – hashg

Verwandte Themen