2011-02-23 17 views
34

ट्रिगर करता है मैं jQuery और JSON के साथ कुछ बुनियादी संचालन को पूर्ववत करने की कोशिश कर रहा हूं। वर्तमान में मेरे प्ले फ्रेमवर्क एप्लिकेशन से JSON प्रतिक्रिया स्वीकार करने वाले jQuery के साथ कठिनाई हो रही है। नीचे कोड का सरलीकृत संस्करण है जो अभी भी त्रुटि उत्पन्न करता है।jQuery JSON प्रतिक्रिया हमेशा एक ParseError

$.ajax({ 
    type: 'POST', 
    url: "@{FrontEnd.isUsernameAvailable()}", 
    data: "name=thisnameisavailable", 
    cache: false, 
    success: function(data) { 
     console.log("Success... "); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("Error... " + textStatus + "  " + errorThrown); 
    }, 
    dataType: 'json' 
}); 

त्रुटि कॉलबैक हमेशा ट्रिगर होता है। यह प्रदर्शित करता है

त्रुटि ... parsererror jQuery15001997238997904205_1298484897373

आमंत्रित नहीं किया गया Firebug के माध्यम से लौटे JSON निरीक्षण कोई त्रुटि और विभिन्न JSON फाहा उपकरण भी मान्य पता चलता है। डेटा बदलना "टेक्स्ट" टाइप करें सफलता को बुलाया जाता है। लेकिन मैं jQuery सत्यापन प्लगइन के हिस्से के रूप में isUsernameAvailable कॉल का उपयोग करने की कोशिश कर रहा हूं, इसलिए मुझे इसे वैध JSON वापस करने की आवश्यकता है।

+0

क्या आप वाकई प्रतिक्रिया (मुझे लगता है कि जवाब है हां;) के प्रकार के आवेदन/json है कर रहे हैं) और अपने json { "मैदान": "मूल्य", ...} की तरह है ... दोहरे उद्धरण कभी कभी महत्वपूर्ण है यदि आपके मान स्ट्रिंग टाइप किए गए हैं और बुलियन या int नहीं हैं ... और कोई अनाथ नहीं है "," ... वैसे भी, आपको एक कामकाज लगता है! – mandubian

+0

आपके प्रश्न में मेरा जवाब ...मेरा php गूंज सरल पाठ का उपयोग करके वापस दे रहा था इसलिए मेरा डेटा बदलना 'टेक्स्ट' टाइप करना नौकरी थी। धन्यवाद :) – Pitto

उत्तर

33

शायद मैं गलतफहमी कर रहा हूं, लेकिन क्या आप dataTypetext और JSON.parse() लौटाए गए डेटा को सेट नहीं कर सके?

success: function(data) { 
    data = JSON.parse(data); 
    // process data 
}, 

संपादित जोड़ने के लिए आम तौर पर समाधान पर (पहले एक ही टिप्पणी) सहमति:

मैं सिर्फ api.jquery.com/jQuery.ajax पर एक नज़र लिया और जैसे jQuery 1.5 के साथ आप एक तरह का एक प्रकार रूपांतरण कर सकते हैं यह लग रहा है। "एकाधिक, अंतरिक्ष से अलग मूल्य: jQuery 1.5 के रूप में, jQuery आपके द्वारा आवश्यकतानुसार सामग्री-प्रकार शीर्षलेख में प्राप्त डेटा से डेटा टाइप को परिवर्तित कर सकता है। उदाहरण के लिए, यदि आप XML प्रतिक्रिया के रूप में एक टेक्स्ट प्रतिक्रिया चाहते हैं, तो" टेक्स्ट टाइप के लिए टेक्स्ट xml "। शायद आप "टेक्स्ट जेसन" आज़मा सकते हैं।

+0

यह वह दिशा हो सकती है जिसमें मुझे जाने की आवश्यकता है। "जेसन" का उपयोग करने के लिए मुझे "आवश्यकता" का कारण यह है कि जिस jQuery सत्यापन प्लगइन का उपयोग कर रहा हूं, उसे JSON वापस करने के लिए दूरस्थ सत्यापन की आवश्यकता है। – Chesrae

+5

मैंने अभी http://api.jquery.com/jQuery.ajax/ पर एक नज़र डाली और ऐसा लगता है कि jQuery 1.5 के साथ आप एक प्रकार का रूपांतरण कर सकते हैं। "एकाधिक, अंतरिक्ष से अलग मूल्य: jQuery 1.5 के रूप में, jQuery आपके द्वारा आवश्यकतानुसार सामग्री-प्रकार शीर्षलेख में प्राप्त डेटा से डेटा टाइप को परिवर्तित कर सकता है। उदाहरण के लिए, यदि आप XML प्रतिक्रिया के रूप में एक टेक्स्ट प्रतिक्रिया चाहते हैं, तो" टेक्स्ट टाइप के लिए टेक्स्ट xml "। शायद आप "टेक्स्ट जेसन" आज़मा सकते हैं। – ggutenberg

+2

मैंने बस jQuery जेडिडेशन प्लगइन कोड में "जेसन" को "टेक्स्ट जेसन" में बदल दिया और सब कुछ पूरी तरह से काम करता है। उत्तर के लिए धन्यवाद, लेकिन मैं अभी भी उलझन में हूं क्यों "जेसन" काम नहीं कर रहा था। सामग्री-प्रकार शीर्षलेख एप्लिकेशन/जेसन पर सेट किया गया था। – Chesrae

12

जैसे ही मैंने jQuery 1.5 में अपग्रेड किया, वही त्रुटि मिली। यह पता चला है कि मेरी समस्या यह है क्योंकि मैं jquery सत्यापन प्लगइन का भी उपयोग कर रहा हूं, जो jQuery 1.5 के साथ संगत नहीं है। यदि मैं jquery सत्यापन प्लगइन को हटाता हूं, $ .ajax() डेटा के साथ टाइप टाइप जेसन ठीक काम करता है।

jQuery सत्यापन प्लगइन असंगति यहाँ बारे में अधिक जानकारी: (jsonp का उपयोग करने और jQuery 1.7.2) http://bugs.jquery.com/ticket/8118

+0

मुझे यह खोजने में थोड़ी देर लग गई, यह मुद्दा था, jquery.validate में संघर्ष। –

+1

jQuery सत्यापन का नया संस्करण (1.8) इस समस्या को हल करता है और jQuery 1.5.x के साथ संगत है। अधिक जानकारी यहां उपलब्ध है: http://jquery.bassistance.de/validate/changelog.txt –

+0

यह वास्तव में सही उत्तर है और इसे इस तरह चिह्नित किया जाना चाहिए। धन्यवाद जॉनीओ! – Dav

3

मैं भी मिल गया "parsererror jQueryNNNN_NNN नहीं बुलाया गया था" कारण यह था कि में से एक मान लौट आए जेसन संरचना में न्यूलाइन शामिल है। उम्मीद है कि यह किसी की मदद करेगा।

2

मुझे parseerror मिला, क्योंकि url में callback=? भाग शामिल था। This is a magic string which activates JSONP functionality

मेरे सर्वर साइड के बाकी एपीआई JSON के JSONP से बदल के रूप में, डेटा स्वरूप लौटे से यह callback=? साथ jQuery.getJSON(..) के साथ संगत नहीं रह गया था। इस स्थिति में, jQuery.getJSON(..)success कॉलबैक नहीं कॉल करेगा, लेकिन fail इसके बजाय कॉलबैक।

मैंने url पैरामीटर से callback=? भाग को हटाकर इस समस्या का समाधान किया।

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