2010-09-23 12 views
10

ऐसा लगता है कि लोगों को अतीत में स्वीकृति हेडर के साथ समस्याएं थीं, लेकिन मुझे यकीन नहीं है कि मेरा मुद्दा संबंधित है। JQuery 1.4.2 का उपयोग करके, मुझे getJSON() के साथ JSON प्राप्त करने में परेशानी हो रही है। मैं फ़ायरबग में अनुरोध/प्रतिक्रिया देख सकता हूं और ऐसा लगता है कि समस्या का स्रोत यह है कि प्रश्न में संसाधन स्वीकार्य हेडर के आधार पर अलग-अलग परिणाम देता है। भले ही दस्तावेज़ कहते हैं कि इसे सेट किया जाना चाहिए, फ़ायरबग में यह "/" के रूप में दिखाई देता है - जाहिर है, मुझे "एप्लिकेशन/जेसन" चाहिए। क्या यह कोई ज्ञात त्रुटि है? क्या मुझे कुछ ध्वज स्थापित करना चाहिए, मुझे पता नहीं है?JQuery के getJSON() सेटिंग को सही ढंग से स्वीकार नहीं कर रहा है?

ईटीए: अनुरोध महत्वपूर्ण है, अगर यह मायने रखता है, लेकिन मैं callback=? क्वेरी पैरामीटर पास कर रहा हूं तो JQuery (सफलतापूर्वक!) इसे JSONP के रूप में पेश कर रहा है। जिस सेवा को मैं इस विशेष मामले में कॉल कर रहा हूं वह एक स्वीकार्य ओवरराइड क्वेरी पैरामीटर (&accept=application/json) का समर्थन करता है, इसलिए मुझे इसे मैन्युअल रूप से काम करने के लिए मिला, लेकिन मुझे अभी भी हेडर स्क्रूअप अजीब होने पर विचार करता है और उम्मीद कर रहा था कि मैं इसे ठीक करने में सक्षम हूं, तो मैं एक अलग सेवा से निपटने के दौरान फिर से इसमें भाग नहीं लेता जो शायद क्षमा नहीं कर सकता है। मैं कॉपी/मेरे विकास के वातावरण से कोड पेस्ट लिए एक आसान तरीका नहीं है, लेकिन यहाँ सार है:

$.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){ 
    console.log(data); 
} 

आप देख सकते हैं, इस वास्तव में जटिल नहीं है, और (मैं 99 हूँ चाहिए % निश्चित ...) परिणामस्वरूप एक एक्सएचआर application/json के स्वीकार्य शीर्षलेख के साथ भेजा जा रहा है। जैसे मैंने कहा, यह नहीं हो रहा है, प्रति फायरबग के नेट कंसोल। यदि यह मायने रखता है, तो यह फ़ायरफ़ॉक्स 3.6.8 में है।

ईटीए दोबारा: किसी के भी अभी भी इसे पढ़ने के लिए, हाँ, यह अभी भी हो रहा है, और नहीं, मुझे नहीं पता कि क्यों। जैसे मैंने कहा, सरल getJSON() कॉल, वास्तव में मूल वाक्यविन्यास, क्रॉस साइट, JSONP के रूप में माना जाता है क्योंकि इसमें कॉलबैक क्वेरी पैरामीटर शामिल है। सुझावों के लिए अभी भी खुला!

+1

हमें अपना कोड दिखाएं और हम आपको और अधिक मदद कर सकते हैं। – Steven

+0

मुझे क्रोम 8 में एक ही समस्या है। $ .getJSON ("url", फ़ंक्शन (डेटा) {}) */* –

उत्तर

13

यह एक बग नहीं है।

चूंकि आपका कॉल क्रॉस-डोमेन है, इसलिए आपका ब्राउज़र आपको एक्सएचआर कॉल (समान उत्पत्ति नीति) बनाने की अनुमति नहीं देगा। आंतरिक रूप से, jQuery क्रॉस-डोमेन कॉल करने के लिए "<script> टैग हैक" का उपयोग करके इस पर काम कर रहा है (यह JSONP डेटा प्रकार के पीछे मूलभूत विचार है)। चूंकि कॉल टैग का उपयोग करके किया जाता है, इसलिए jQuery के लिए हेडर के accepts भाग को संशोधित करना संभव नहीं है।

jQuery इन विवरणों को छुपाकर अपने जादू का काम करता है, लेकिन दुर्भाग्य से इस मामले में आप Law of Leaky Abstractions के अधीन हैं।

+0

बहुत अंतर्दृष्टिपूर्ण जवाब –

2

अपना कोड (जो हमें एक स्पष्ट समाधान के लिए इंगित कर सकता है) देखे बिना आप मानक अजाक्स फ़ंक्शन का उपयोग करने का प्रयास कर सकते हैं और देख सकते हैं कि आपको अलग-अलग परिणाम मिलते हैं या नहीं?

$.ajax({ 
    url: '/what.eva', 
    dataType: 'json', 
    data: '{}', 
    success: callbackFunc 
}); 

function callbackFunc(result) { 
    alert(result); 
} 
+0

पर स्वीकृति शीर्षलेख सेट कर रहा है मैंने आपके getJSON कॉल को प्रतिस्थापित करने का प्रयास किया है, विवरण अब मुख्य प्रश्न में सूचीबद्ध हैं) $ .ajax आमंत्रण के साथ, और परिणाम बिल्कुल वही हैं। मुझे लगता है कि यह एक ज्ञात बग होना है, या शायद यह है कि मेरा ब्राउज़र अजीब है, लेकिन यह निश्चित रूप से अपेक्षित व्यवहार के प्रतिद्वंद्वी चलाता है। – Coderer

2

यह एक बग है जो jquery वेबसाइट पर बंद कर दिया गया है।

http://dev.jquery.it/ticket/6551

वहाँ अभी तक इस के लिए एक ठीक होने के लिए प्रकट नहीं होता।

+0

वाह, तो किसी और के पास समस्या है, लेकिन वे पुन: पेश नहीं कर सकते हैं इसलिए उन्होंने इसे बंद कर दिया? मैं देखूंगा कि मैं इसमें योगदान कर सकता हूं, किसी भी तरह ... – Coderer

+0

यदि आप उत्सुक हैं: टिकट का समाधान हो गया था, और पीट का जवाब सही है - भले ही यह * सामान्य "AJAX अनुरोध जैसा दिखता हो (एक्सएचआर), इसे गतिशील '