2017-11-20 43 views
5

अजाक्स जीईटी अनुरोध ठीक से काम कर रहे हैं। लेकिन मुझे POST का उपयोग करना है क्योंकि मुझे बड़ी मात्रा में डेटा भेजने की उम्मीद है, जीईटी के लिए बहुत अधिक है।AJAX, ठीक है, पोस्ट नहीं

पर्यावरण: अपाचे 2, डेबियन 9 (स्क्रैच से), jQuery 3.2.1, कुछ खास नहीं।

मैं इस कोड को अपनी समस्या नीचे छीन लिया:

ग्राहक

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="de"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <title>Ajaxtest</title> 
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
</head> 
<body> 
    <script language="JavaScript"> 
    <!-- 
    $.ajax({ 
     url: 'ajaxtest2.php', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     type: 'POST', 
     data: {testdata: 'here I am'}, 
     success: function (resp) { 
      console.log(resp); 
     }, 
    }); 
    --> 
    </script> 
</body> 
</html> 

सर्वर

<?php 
ini_set('error_reporting', E_ERROR); 
header('Content-type: application/json'); 
header('HTTP/1.1 200 OK'); 
print json_encode(
    array(
     'method'=>$_SERVER['REQUEST_METHOD'], 
     'get'=>$_GET['testdata'], 
     'post'=>$_POST['testdata']) 
    ); 
exit(); 
?> 

प्राप्त के माध्यम से ajax कॉल भेजने जब मैं केवल बदल

type: 'POST' 

type: 'GET' 

कौन सा मुझे कंसोल पर इस परिणाम देता है:

{method: "GET", get: "here I am", post: null}

ये कुछ बातें होती है।

लेकिन जब पोस्ट के माध्यम से बुला रहा मिलती है:

{method: "POST", get: null, post: null}

सर्वर एक पोस्ट अनुरोध को समझता है, लेकिन किसी भी मूल्यों वितरित नहीं करता है।

मैं के रूप में एक ही परिणाम

url: 'ajaxtest2.php' 
url: './ajaxtest2.php' 
url: './ajaxtest2.php/' 

साथ कुछ लोगों द्वारा की सलाह दी लक्ष्य यूआरएल सहित के विभिन्न तरीकों की कोशिश की वे सब कोई फर्क: $ _POST रहता है खाली।

इसके अलावा, मैं get_defined_vars() सर्वर पर है, लेकिन $ _POST रहता खाली लॉग इन और वहाँ फेंक दिया चर में कहीं भी की 'यहाँ मैं कर रहा हूँ' कोई निशान है।

यूआरएल पुनर्लेखन या इसी तरह के साथ कोई htaccess mingling नहीं है।

मैं और क्या कर सकता हूं?

+0

क्या आपके * ब्राउज़र * करता है कहते हैं कि यह (नेटवर्क टैब पर) भेज रहा है। –

+1

एक परीक्षण के लिए, टिप्पणी करें 'सामग्री टाइप करें:' एप्लिकेशन/जेसन; charset = utf-8'' और POST परीक्षण फिर से प्रयास करें। – IncredibleHat

+0

php में '$ _REQUEST ['testdata']' output क्या करता है? – skobaljic

उत्तर

1

मेरी टिप्पणी है कि काम किया, के लिए विस्तृत उत्तर thusly है: पोस्ट भेजने के लिए

application/json; charset=utf-8 
डिफ़ॉल्ट के बजाय

और आदर्श:

आप सर्वर की contentType उपयोग करने के लिए डेटा भेजने के लिए कोशिश कर रहे थे डेटा:

application/x-www-form-urlencoded; charset=UTF-8 

सर्वर छोर पर, यह application/json के रूप में एक फार्म पोस्ट के रूप में contentType ले रहा था, बल्कि,। इसका मतलब है कि php का उपयोग करने के लिए $ _POST चर में कोई डेटा नहीं डाला गया है।

जीईटी एक अलग कहानी है, क्योंकि डेटा यूआरएल में सवारी करता है, शरीर में नहीं।

AJAX कॉल के लिए एन्कोडिंग प्रकार हमेशा utf-8 होना चाहिए, इसलिए यह मुद्दा भी नहीं था।

आप आम तौर पर एक सर्वर कि की तरह करने के लिए json डेटा भेजने के लिए नहीं चाहते की जानी चाहिए। यह केवल तभी उचित है जब आप किसी ऐसे एप्लिकेशन को डेटा भेज रहे हैं जो कच्चे जेसन डेटा की अपेक्षा कर रहा है कि वह स्वीकृति पर पार्स कर रहा है। एक PHP सर्वर के लिए, यह 'फॉर्म डेटा' चाहता है (अन्यथा आपको php://input पढ़ने की आवश्यकता है, नीचे नीचे संदर्भ यूआरएल देखें)।

आशा है कि भ्रम को दूर करने में मदद मिलेगी।

कुछ अधिक जानकारी: http://api.jquery.com/jquery.ajax/ (contentType जानकारी) https://forum.jquery.com/topic/ajax-with-contenttype-application-json (पिछले पोस्ट उपयोगी है)

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