2010-05-08 7 views
15

है, मैं फ़ायरफ़ॉक्स के अलावा ब्राउज़र के साथ संगतता सुनिश्चित करने के लिए jQuery का उपयोग करने के लिए जावास्क्रिप्ट/php/AJAX एप्लिकेशन को परिवर्तित कर रहा हूं।jQuery AJAX का उपयोग कर सर्वर पर शून्य पास नहीं कर सकता। सर्वर पर प्राप्त मान स्ट्रिंग "नल"

मुझे jQuery के AJAX फ़ंक्शन का उपयोग करके सत्य, झूठे और शून्य मानों को पार करने में समस्या हो रही है।

Javascript कोड:

$.ajax 
(
    { 
     url  : <server_url>, 
     dataType: 'json', 
     type : 'POST', 
     success : receiveAjaxMessage, 
     data: 
     { 
     valueTrue : true, 
     valueFalse: false, 
     valueNull : null 
     } 
    } 
); 

PHP कोड:

var_dump($_POST); 

सर्वर उत्पादन:

array(3) { 
    ["valueTrue"]=> 
    string(4) "true" 
    ["valueFalse"]=> 
    string(5) "false" 
    ["valueNull"]=> 
    string(4) "null" 
} 

समस्या है कि अशक्त, सच है, और झूठे मूल्यों में बदल किया जा रहा है तार।

वर्तमान में उपयोग में जावास्क्रिप्ट AJAX कोड शून्य, सत्य और गलत तरीके से गुजरता है लेकिन केवल फ़ायरफ़ॉक्स में काम करता है।

क्या कोई जानता है कि jQuery का उपयोग करके इस समस्या को कैसे हल किया जाए?


यहाँ कुछ काम कर कोड (jQuery का उपयोग नहीं) ऊपर दिए गए नहीं काम कोड के साथ तुलना करने के लिए है।

जावास्क्रिप्ट कोड:

ajaxPort.send 
(
    <server_url>, 
    { 
     valueTrue : true, 
     valueFalse: false, 
     valueNull : null 
    } 
); 

PHP कोड:

var_dump(json_decode(file_get_contents('php://input'), true)); 

सर्वर उत्पादन:

array(3) { 
    ["valueTrue"]=> 
    bool(true) 
    ["valueFalse"]=> 
    bool(false) 
    ["valueNull"]=> 
    NULL 
} 

ध्यान दें कि अशक्त, सच है, और झूठे मान सही ढंग से प्राप्त कर रहे हैं।

ध्यान दें कि दूसरी विधि में $ 2_POST सरणी PHP कोड में उपयोग नहीं की जाती है। मुझे लगता है कि यह समस्या की कुंजी है, लेकिन मुझे jQuery का उपयोग करके इस व्यवहार को दोहराने का कोई तरीका नहीं मिल रहा है।


यह खंड नीचे स्वीकार कर लिया गया जवाब के बाद जोड़ा गया है।

यहां मूल कोड का एक सही संस्करण है।

Javascript कोड:

$.ajax 
(
    { 
     url  : <server_url>, 
     dataType: 'json', 
     type : 'POST', 
     success : receiveAjaxMessage, 
     data : JSON.stringify 
     (
     { 
      valueTrue : true, 
      valueFalse: false, 
      valueNull : null 
     } 
    ) 
    } 
); 

PHP कोड:

var_dump(json_decode(file_get_contents('php://input'), true)); 

सर्वर उत्पादन:

array(3) { 
    ["valueTrue"]=> 
    bool(true) 
    ["valueFalse"]=> 
    bool(false) 
    ["valueNull"]=> 
    NULL 
} 
+0

मैं गलत हो सकता हूं लेकिन क्या आपका डेटा वैध JSON है? क्या सभी कुंजी/मानों को "" में संलग्न नहीं किया जाना चाहिए? यह आपकी समस्या का समाधान नहीं कर सकता है, लेकिन यदि आप अपना डेटा स्ट्रिंग करते हैं और शून्य मान के लिए बस खाली स्ट्रिंग पास करते हैं तो मुझे लगता है कि यह काम कर सकता है? मुझे लगता है कि jquery आपके डेटा को "" में लपेट रहा है, इसलिए सर्वर पर जो वैल्यू आप भेज रहे हैं वह एक स्ट्रिंग है जिसमें पाठ शून्य है, जैसे: "शून्य"। – DannyLane

+0

डैनी का जवाब देने के लिए धन्यवाद, लेकिन मुझे यकीन है कि जेएसओएन में सत्य, झूठी और शून्य का उपयोग नहीं किया जा सकता है। Www.json.org देखें। – Tom

+0

आप शायद सही थे, लेकिन मैंने आपको गलत समझा। जावास्क्रिप्ट पक्ष में डेटा को स्ट्रिंग करने से समस्या हल हो गई। – Tom

उत्तर

10

आप क्या उम्मीद करेंगे? आप इन मानों को POST पैरामीटर के रूप में भेज रहे हैं, जो साधारण टेक्स्ट स्ट्रिंग हैं। यदि आप टाइप-सुरक्षित स्थानांतरण चाहते हैं, तो JSON जैसे कुछ प्रकार के एन्कोडिंग का उपयोग करें। (जो dataType करता है - जो सर्वर से प्रतिक्रिया को संदर्भित करता है।)

+1

धन्यवाद। जेएसओएन ने समस्या को हल करने के रूप में डेटा एन्कोडिंग। मैंने 'डेटा टाइप' विकल्प के उद्देश्य को गलत समझा। – Tom

1

मैं उम्मीद करता हूं कि यह क्वेरी पैरा को valueNull = के बजाय valueNull = null के बजाय भेजने का अनुमान होगा जो मेरा अनुभव है।

यदि आप JSON के साथ REST कर रहे हैं तो आपको अभी भी GETS के लिए क्वेरी पैराम भेजने की आवश्यकता है और आपको इस समस्या को हल करने के लिए अपने सभी GETS को POSTS में परिवर्तित नहीं करना चाहिए।

9

में तय हो गई है आप अपरिभाषित बजाय अशक्त उपयोग कर सकते हैं।

data: { 
    valueTrue : true, 
    valueFalse: false, 
    valueNull : undefined 
} 
+0

मीठे समाधान! – zeckdude

+0

वह वास्तव में मेरे लिए पूरी तरह से काम किया। –

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