2013-01-02 57 views
7

का उपयोग करते समय यह सवाल वर्षीय अनुत्तरित प्रश्न के लगभग समान है चर:पीएचपी पोस्ट परिभाषित नहीं क्रोम + एक्सएचआर

HTTP-POST XHR not working in chrome

मैं एक समाधान खोजने की उम्मीद कर रहा था और मूल प्रश्न की तुलना में अधिक जानकारी प्रदान कर सकता हूं।

पृष्ठभूमि

मैं एक Sever साइड PHP स्क्रिप्ट है कि एक फार्म या एक्सएचआर अनुरोध से पोस्ट डेटा लेने के लिए माना जाता है की है। जब मैं जमा करने के लिए एक फॉर्म का उपयोग कर साइट का परीक्षण करता हूं, तो यह क्रोम और आईई 9 में काम करता है। हालांकि, जब मैं XHR का उपयोग कर अनुरोध उत्पन्न करता हूं, तो क्लाइंट पक्ष पर क्रोम का उपयोग करते समय php POST चर अपरिभाषित होता है। यह व्यवहार असंगत है: लगभग 20 में से 1 प्रयास, PHP डेटा स्वीकार करता है।

मैंने php://input स्ट्रीम की जांच की है और देखें कि पोस्ट डेटा सभी मामलों में सर्वर पर भेजा जा रहा है; और ध्यान दें कि HTTP शीर्षलेखों में से कुछ छोटे ($_SERVER) परीक्षण मामलों के बीच अलग हैं।

कोड

सर्वर साइड:

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

क्लाइंट साइड फार्म संस्करण (क्रोम और IE9 दोनों काम)

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

क्लाइंट साइड एक्सएचआर संस्करण (IE9 हमेशा काम करता है, जो Chrome के काम लगभग 5% समय)

<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> 

आउटपुट

सभी मामलों अनुरोध शरीर डेटा (php://input) में एक ही मान देता है। हेडर ज्यादातर एक ही हैं, लेकिन क्रोम क्रोम + एक्सएचआर मामले को छोड़कर एक्सएचआर मोड

$_POST चर [myField] => test के रूप में परिभाषित किया गया है में एक [HTTP_PRAGMA] => no-cache कहते हैं।

प्रश्न

कहाँ समस्या होने की संभावना हो रहा है? क्या संभव है HTTP हेडर के साथ कुछ गड़बड़ है, या मुझे सर्वर-साइड दिखाना चाहिए। कोई विचार?

+0

में मदद करता है 'PostToURL()' कब कहा जाता है? – jeremy

+0

इसे बटन 'ऑनक्लिक' ईवेंट से बुलाया जाता है। – nicholas

+0

क्या आप हमें दिखा सकते हैं कि कृपया? – jeremy

उत्तर

1

प्लेस अपने पृष्ठ

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

की पहली पंक्ति में इस कोड को और अपने पृष्ठ की अंतिम पंक्ति में इस कोड को

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

मैं आशा है कि आप

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^