2011-11-22 19 views
6

Mam problem z połączeniem http w firefoxie. Wiem, że gdy istnieje pochodzenie krzyżowe, firefox najpierw wykonaj OPCJE przed POST, aby poznać nagłówki kontroli dostępu. Z tego kodu nie mam żadnego problemu:Zapytanie o pocztę HTTP z kodem źródłowym w javascript

Net.requestSpeech.prototype.post = function(url, data) { 
    if(this.xhr != null) { 
     this.xhr.open("POST", url); 
     this.xhr.onreadystatechange = Net.requestSpeech.eventFunction; 
     this.xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     this.xhr.send(data); 
    } 
} 

przetestować ten kod za pomocą prostego kodu HTML, który wywołuje tę funkcję. Wszystko jest w porządku i mam odpowiedź OPCJI i POST, i przetwarzam odpowiedź. Ale próbuję zintegrować ten kod z istniejącą aplikacją z użyciem jquery (nie wiem, czy to jest problem), kiedy wysyłanie (dane) wykonuje się w tym przypadku, przeglądarka (firefox) robi to samo, najpierw prośba opcja, ale w tym przypadku nie otrzymania odpowiedzi z serwera i umieszcza komunikat w konsoli:

[18:48:13.529] OPTIONS http://localhost:8111/ [undefined 31ms] 

Undefined ... undefined dlatego nie otrzyma odpowiedzi, ale kod jest taki sam, i nie wiem dlaczego w takim przypadku opcja nie otrzymuje odpowiedzi, ktoś ma pomysł?

i debugowania aplikacji serwera i OPCJE dotrze OK do serwera, ale wydaje się, że przeglądarka nie czekać na odpowiedź.

edytuj więcej później: ok, wydaje mi się, że problem polega na tym, że uruchamiam się za pomocą prostego html ze znacznikiem SCRIPT, który wywołuje metodę, która wywołuje żądanie, ale w tej aplikacji, która nie otrzymała odpowiedzi, mam formularz, który robi zdarzenie onsubmit, myślę, że zdarzenie submit zwraca bardzo szybko, a przeglądarka nie ma czasu, aby uzyskać żądanie OPTIONS.

edit więcej później później: WTF, i rozwiązać problem uczynić żądanie POST do synchronizacji:

this.xhr.open("POST", url, false); 

Bardzo szybko złożyć réponse i nie może czekać na odpowiedź OPTION przeglądarki, każdy pomysł na to?

Odpowiedz

2

Z powodu tej samej zasady pochodzenia, nie można wysłać postu o pochodzeniu krzyżowym, można obejść go poprzez uwzględnienie witryn w elementach iframe (jeśli ma dostęp do domeny) oryginalna witryna zawiera element iframe na stronie zewnętrznej, wewnętrzny kierunek jest legalny.