2011-03-15 9 views
6

मेरे पास जावास्क्रिप्ट में एक ऑब्जेक्ट है कि मैं एक PHP स्क्रिप्ट पर AJAX पोस्ट करने का प्रयास कर रहा हूं। सबकुछ jQuery 1.4.1 में काम करता था लेकिन अब 1.4.4 या उससे ऊपर सभी रिक्त सरणी या खाली वस्तुएं स्ट्रिंग (0) के रूप में आती हैं जो गलत है।jQuery 1.4.4+ AJAX अनुरोध - खाली सरणी पोस्ट करें या ऑब्जेक्ट स्ट्रिंग हो जाता है

जे एस:

$(document).ready(function() { 
var obj = {}; 
obj.one = []; 
obj.two = {}; 
obj.three = []; 
obj.three.push('one'); 
obj.three.push('two'); 
obj.three.push('three'); 
obj.four = "onetwothree"; 

$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: obj, 
    success: function(data) { 
     alert(data); 
    }, 
}); 
}); 

पीएचपी:

<?php 
var_dump($_POST); 
?> 

प्रतिक्रिया:

array(4) { 
    ["one"]=> string(0) "" 
    ["two"]=> string(0) "" 
    ["three"]=> array(3) { 
    [0]=> string(3) "one" 
    [1]=> string(3) "two" 
    [2]=> string(5) "three" 
    } 
    ["four"]=> string(11) "onetwothree" 
} 

संस्करण में 1.4.1 यह सिर्फ नहीं भेजना होगा ["एक"] या ["दो"], लेकिन अब नए संस्करणों में, तथ्य यह है कि यह एक स्ट्रिंग के रूप में आता है पूरे आवेदन को फेंक देता है। क्या ऐसा कुछ भी है जो मैं कर सकता हूं ताकि एक खाली सरणी ([]) PHP में खाली सरणी ([]) के रूप में आती है और जावास्क्रिप्ट ऑब्जेक्ट्स के साथ ही?

+1

हाय। क्या आपको इस समस्या का कोई समाधान मिला? मुझे इसमें भी रूचि है। आपकी पोस्ट देखने से पहले मैंने पहले से ही यह पोस्ट किया है (http://stackoverflow.com/questions/9179473/why-jquery-ajax-does-not-serialize-my-object)। –

उत्तर

2

true को traditional विकल्प सेट करके देखें:

$.ajax({ 
    type: 'POST', 
    traditional: true, 
    url: 'ajax.php', 
    data: obj, 
    success: function(data) { 
     alert(data); 
    } 
}); 

newer API की data और traditional विकल्पों पर एक नजर डालें।

और यदि आप आईई 7 में काम करना चाहते हैं तो success कॉलबैक के बाद अतिरिक्त कॉमा हटा दें।

+0

धन्यवाद करीम 7 9, मैंने पारंपरिक को सही करने की कोशिश की लेकिन खाली सरणी और ऑब्जेक्ट अभी भी एक स्ट्रिंग (0) के रूप में आया लेकिन अब मेरा घोंसला वाला सरणी [ऑब्जेक्ट ऑब्जेक्ट] बन गया। –

3

मानकों को पारित कर दिया

data: JSON.stringify (obj), 

नोट आप की संभावना सही ढंग से डेटा की प्रक्रिया करने के लिए सर्वर साइड संकेत करने के लिए contentType: "application/json" विकल्प शामिल करना चाहते हैं के लिए JSON.stringify लागू करने की कोशिश।

उद्धृत: Why jQuery ajax does not serialize my object?

परंपरागत: सच है, पूरी तरह से गलत है, क्योंकि यह वस्तु पदानुक्रम कभी नहीं संभाल सकते हैं। इसके बजाय आपको क्या मिलता है: ... & कुंजी = [ऑब्जेक्ट ऑब्जेक्ट], जो जावास्क्रिप्ट के toString() सभी ऑब्जेक्ट्स के लिए डिफ़ॉल्ट परिणाम है।

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