2012-02-01 24 views
27

मैं 2 पोस्ट मानों के साथ एक अजाक्स अनुरोध भेज रहा हूं, पहला "क्रिया" है जो परिभाषित करता है कि मेरी PHP स्क्रिप्ट को किस क्रिया का विश्लेषण करना है, दूसरा "आईडी" है जो उपयोगकर्ता की आईडी है जिसे इसे स्क्रिप्ट को पार्स करना है ।
सर्वर एक सरणी के अंदर 6 मान देता है() और फिर पीएचपी समारोह के साथ JSON को एन्कोड किया गया है: json_encode();
मेरी प्रतिक्रियाओं की कुछ HTML हैं, लेकिन जब मैं यह JSON करने के लिए सांकेतिक शब्दों में बदलना है, यह निकल जाता "/" तो यह "\/"
हो जाता है मैं इसे कैसे अक्षम कर सकता हूं?

जब मुझे पता नहीं होता कि जब मैं सर्वर प्रतिक्रिया प्राप्त करता हूं तो jQuery में इसे कैसे प्रदर्शित किया जाए, मैंने सोचा कि इसे सभी को div में डालने से केवल उन संख्याओं और HTML कोड प्रदर्शित होंगे जिन्हें मैंने अनुरोध किया था, लेकिन यह सरणी प्रदर्शित करता है क्योंकि यह PHP में एन्कोड किया गया है।जेसन प्रतिक्रिया के साथ jQuery AJAX अनुरोध, कैसे करें?

पीएचपी

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo json_encode($response); 

jQuery:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    complete: function(data) { 
     $('#main').html(data.responseText); 
    } 
}); 

कैसे मैं JSON काम करने के लिए इस कर सकता हूँ?

+0

के लिए आप भी समस्या का एक बेहतर विचार प्राप्त करने के लिए अपने JSON उत्तर डंप कर सकते हैं? सुनिश्चित नहीं हैं कि "/" तो यह हो जाता है से क्या मतलब है "/" ​​ – Sid

+0

आप http://api.jquery.com/jQuery.getJSON/ की कोशिश की? –

+0

खेद sid मैं एक बैकस्लैश बनाया लेकिन यह थोड़े गायब हो गया :) लेकिन हर सामान्य स्लेश इससे पहले कि यह "बैकस्लैश" + "सामान्य स्लैश" ka_lin एक बैकस्लैश हो जाता है: मैं इसे देखा लेकिन मैं did not यह समझते हैं, और अगर मैं था, कैसे होगा मैं अनुरोध के साथ कुछ पोस्ट डेटा भेजता हूँ? – Flaashing

उत्तर

38

आप

कॉल करने की आवश्यकता
$.parseJSON(); 

उदाहरण के लिए:

... 
success: function(data){ 
     var json = $.parseJSON(data); // create an object with the key of the array 
     alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>"; 
    }, 
    error: function(data){ 
     var json = $.parseJSON(data); 
     alert(json.error); 
    } ... 

http://api.jquery.com/jQuery.parseJSON/

में देख आप अभी भी स्लैश की समस्या है, तो: के लिए खोज security.magicquotes.disabling.php या: function.stripslashes.php

नोट:

यहाँ इस उत्तर उन लोगों के लिए है जो json को dataType संपत्ति सेट और यहां तक ​​कि कि मिल गया के साथ $.ajax उपयोग करने का प्रयास गलत प्रतिक्रिया प्रकार। सर्वर में header('Content-type: application/json'); परिभाषित समस्या को दूर कर सकते हैं, लेकिन अगर आप text/html या किसी भी अन्य प्रकार लौट रहे हैं, $.ajax विधि json को परिवर्तित करना चाहिए। मैं jQuery के पुराने संस्करणों के साथ और केवल संस्करण 1.4.4$.ajax बल dataType पारित कर दिया करने के लिए किसी भी सामग्री प्रकार परिवर्तित करने के लिए के बाद एक परीक्षण करते हैं। तो अगर आपको यह समस्या है, तो अपने jQuery संस्करण को अपडेट करने का प्रयास करें।

+0

यह एक त्रुटि देता है: गायब) तर्क सूची के बाद "चेतावनी (डेटा.0);" – Flaashing

+0

हाँ, यह एक उदाहरण था। आपको अपनी सरणी को उस कुंजी से परिभाषित करना है जिसे किसी ऑब्जेक्ट में परिवर्तित किया जा सकता है, क्योंकि संख्याएं हो सकती हैं। $ प्रतिक्रिया की तरह ['html'] = "कुछ"; आप इसे parseJSON json.html (ऊपर दिए गए उदाहरण की तरह) का उपयोग करके कॉल करते हैं। – Guilherme

+0

ओह हाँ यह काम करता है! जितना सरल मैं चाहता हूं :) धन्यवाद! – Flaashing

23
सबसे पहले

, यदि आप अपने PHP के हेडर सेट JSON सेवा करने के लिए यह मदद मिलेगी: दूसरे

header('Content-type: application/json'); 

, यह आपके ajax कॉल को समायोजित करने में मदद मिलेगी:

$.ajax({ 
    url: "main.php", 
    type: "POST", 
    dataType: "json", 
    data: {"action": "loadall", "id": id}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(error){ 
     console.log("Error:"); 
     console.log(error); 
    } 
}); 

सफल होने पर, आपको प्राप्त प्रतिक्रिया को वास्तविक JSON के रूप में उठाया जाना चाहिए और एक ऑब्जेक्ट को कंसोल पर लॉग किया जाना चाहिए।

नोट: यदि आप शुद्ध एचटीएमएल लेना चाहते हैं, तो आप जेएसओएन को एक और विधि का उपयोग करने पर विचार करना चाहेंगे, लेकिन मैं व्यक्तिगत रूप से जेएसओएन का उपयोग करने की सिफारिश करता हूं और टेम्पलेट्स (जैसे Handlebars js) का उपयोग करके इसे HTML में प्रस्तुत करता हूं।

+0

मैं अपने उदाहरण की कोशिश की, मेरी फ़ायरबग कंसोल में मैं प्रतिक्रिया मिल: लापता} संपत्ति सूची के बाद "सफलता: समारोह (डेटा) {" हाँ, आप एक कोमा डेटा सेट करने के बाद याद किया। लेकिन अब यह मुझे फायरबग – Flaashing

+0

में जेसन में कोडित प्रतिक्रिया देता है। मुझे एक वाक्यविन्यास त्रुटि थी - "सफलता" "सफलता" होना चाहिए, और मुझे कॉमा याद आया। अब आप अपनी प्रतिक्रिया का पता लगाने और डीओएम में इसके आउटपुट हिस्सों का पता लगाने में सक्षम होना चाहिए। – sgb

+0

हां इसके बारे में, आप सरणी को jquery में 6 बिट्स में कैसे विभाजित करते हैं और उन्हें 6 भिन्न तत्वों में आउटपुट करते हैं? – Flaashing

1

चूंकि आप एक स्ट्रिंग के रूप में मार्कअप बना रहे हैं, इसलिए आपने इसे जेसन में परिवर्तित नहीं किया है। बस इसे भेजें क्योंकि यह implode विधि का उपयोग कर सभी सरणी तत्वों को संयोजित कर रहा है। इसे इस्तेमाल करे।

पीएचपी परिवर्तन

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo implode("", $response);//<-----Combine array items into single string 

जे एस (HTML करने के लिए json से डेटाप्रकार बदलें या बस इसे सेट नहीं करते jQuery यह पता लगा होगा)

$.ajax({ 
    type: "POST", 
    dataType: "html", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    success: function(response){ 
     $('#main').html(response); 
    } 
}); 
+0

@ फ्लैशिंग - क्या आपने यह कोशिश की? – ShankarSangoli

+0

नहीं क्योंकि मैं 6 अलग-अलग तत्वों में से प्रत्येक 6 मानों को प्रदर्शित करना चाहता हूं :) – Flaashing

2

भेजने और आबद्ध डेटा के साथ opcodes प्राप्त का उपयोग कर अपने जावास्क्रिप्ट clientside नियंत्रक और php serverside नियंत्रक कनेक्ट करें। तो अपने php कोड js recepient/श्रोता के लिए प्रतिक्रिया कार्यात्मक डेल्टा के रूप में भेज सकते हैं

https://github.com/ArtNazarov/LazyJs

क्षमा देखना मेरा बुरा अंग्रेजी

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