2013-01-02 14 views
7

To pytanie jest prawie identyczna do pytania bez odpowiedzi-letniego:PHP POST zmienna nie określono przy użyciu Chrome + XHR

HTTP-POST XHR not working in chrome.

Miałem nadzieję znaleźć rozwiązanie i mogę zaoferować więcej szczegółów niż oryginalne pytanie.

Tło

Mam skrypt php Sever-boczny, który ma pobierać dane z żądania POST formularza lub użyciem nagłówków XHR. Kiedy testuję witrynę za pomocą formularza do przesłania, działa on w Chrome i IE9. Jednak gdy generuję żądanie za pomocą XHR, zmienna PHP POST jest niezdefiniowana podczas korzystania z Chrome po stronie klienta. Takie zachowanie jest niespójne: około 1 na 20 prób, php akceptuje dane.

Sprawdziłem strumień php://input i widzę, że dane pocztowe są wysyłane na serwer we wszystkich przypadkach; i zauważ, że kilka małych nagłówków HTTP ($_SERVER) różni się między przypadkami testowymi.

Kod

po stronie serwera:

<?php 
    echo file_get_contents("php://input") . "\n"; 
    print_r($_SERVER); 
    print_r($_POST); 
?> 

wersja formularza po stronie klienta (Chrome i IE9 zarówno praca)

<form action="scriptName.php" method="post"> 
     Field: <input type="text" name="myField"><br> 
     <input type="submit" value="Submit"> 
</form> 

wersja Client strona XHR (IE9 działa zawsze, Chrome działa około 5% czasu)

<script> 
function postToURL(url,data) 
{ 
    // Typical XHLHttpRequest declarations are removed for brevity 
    // - checks browser type and declares xmlhttp accordingly 
    // - defines a onreadystatechange handle 

    xmlhttp.open("POST",url,false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 
</script> 
... 
<form> 
<button type="button" onClick="postToURL('scriptname.php','myField=test');"> 
Test 
</button> 
</form> 

Wyjście

We wszystkich przypadkach dane żądanie ciała (php://input) zwraca taką samą wartość. Kolektory są w większości takie same, ale chrom dodaje [HTTP_PRAGMA] => no-cache w trybie użyciem nagłówków XHR

Zmienna $_POST jest zdefiniowana jako [myField] => test wyjątkiem chrom + użyciem nagłówków XHR.

Pytania

gdzie jest problem prawdopodobnie występuje? Czy jest coś nie tak z nagłówkami HTTP, czy powinienem wyglądać po stronie serwera. Jakieś pomysły?

+0

Kiedy wywoływane jest 'postToURL()'? – jeremy

+0

Jest wywoływana z zdarzenia 'onClick' przycisku. – nicholas

+0

Czy możesz nam to pokazać? – jeremy

Odpowiedz

1

Umieść ten kod w pierwszej linii strony

<?php ob_start(); error_reporting(E_ALL & ~E_NOTICE & ~8192); ?> 
<!-- Ignore Errors , Header Sent Report --> 

i ten kod w ostatniej linii strony

<!-- Ignore Header Sent Error --> 
<?php ob_flush(); ?> 
<!-- Ignore Header Sent Error --> 

Mam nadzieję, że pomaga

Powiązane problemy