2012-02-11 21 views
5

का उपयोग कर पाठ के रूप में प्रतिक्रिया की व्याख्या करें: लघु प्रश्न: क्या सर्वर पर jsonp अनुरोध करने का अनुरोध है, अनुरोध पर कब्जा करें, लेकिन इसे जावास्क्रिप्ट के रूप में पार्स नहीं करें? मैं डेटा टाइप का उपयोग कर रहा हूं: jQuery 1.5 में "jsonp टेक्स्ट" लेकिन यह काम नहीं कर रहा है।jsonp के रूप में अनुरोध भेजें, jQuery 1.5

मैं jsonp के साथ AJAX के माध्यम से एक क्रॉस-डोमेन यूआरएल तक पहुंचने का प्रयास कर रहा हूं। समस्या यह है कि अन्य डोमेन (मेरे विश्वविद्यालय में एक निर्देशिका सूची) बहुत पुरानी है और मुझे संदेह है कि सर्वर jsonp का समर्थन करता है।

  • फ़ायरफ़ॉक्स में, मुझे "एक्सएमएल टैग नाम मिस्चैच (अपेक्षित मेटा)" त्रुटि मिलती है। क्रोम में मुझे एक "अनकॉट सिंटेक्स त्रुटि अनपेक्षित टोकन <" दोनों मेरे AJAX अनुरोध से संबंधित फ़ाइल को इंगित करते हैं। त्रुटि कॉलबैक से त्रुटि स्ट्रिंग "parsererror" है।
  • मैं सामान्य AJAX कॉल नहीं कर सकता - जब मैं डेटाटाइप को केवल "टेक्स्ट" में बदलता हूं या इसे एक साथ हटा देता हूं, तो अन्य डोमेन शिकायत करता है कि उपयोगकर्ता प्रमाणीकृत नहीं है और लॉगिन पृष्ठ पर रीडायरेक्ट करता है - भले ही मैं ब्राउज़र पक्ष में पहले ही लॉग इन है। जब डेटा टाइप jsonp है, तो ऐसा नहीं होता है।
  • मुझे पता है कि सर्वर को JSONP का समर्थन करने की आवश्यकता है, और मुझे नहीं लगता कि यह करता है, लेकिन जब मैं डेटा टाइप को JSONP में बदलता हूं, तो मैं प्रतिक्रिया पृष्ठ संसाधन क्रोम और फ़ायरफ़ॉक्स दोनों में दिखाई देता हूं - इसलिए सर्वर वास्तव में भेजता है ब्राउज़र की प्रतिक्रिया (एक स्थिर HTML वेबपृष्ठ + कुछ जावा स्क्रिप्ट) - जिसमें वह डेटा शामिल है जिसे मैं प्राप्त करना चाहता हूं।
  • समस्या यह है कि jQuery जावास्क्रिप्ट के रूप में प्रतिक्रिया को पार्स करने का प्रयास कर रहा है, और विफल रहता है (क्योंकि यह जावास्क्रिप्ट नहीं है)। तो डेटा ब्राउज़र में समाप्त होता है - मुझे बस इसे एक्सेस करने की आवश्यकता है!
  • डेटा का उपयोग करना टाइप: "जेसनपी टेक्स्ट" जो इंगित करना है कि एक जेसनपी अनुरोध भेजें और प्रतिक्रिया की व्याख्या करें क्योंकि टेक्स्ट में कोई फर्क नहीं पड़ता है - अभी भी एक पार्स त्रुटि है।

मुझे जो चाहिए वह है: एक जेएसएसपी अनुरोध से सादे पाठ के रूप में प्रतिक्रिया तक पहुंचने का एक तरीका। या, यदि मैं एक असफल jsonp अनुरोध से कच्ची प्रतिक्रिया तक पहुंच सकता हूं - जो भी काम करेगा।

अग्रिम धन्यवाद!

कोड:

ajax_url = 'https://somesite/?searchTerm='+query+'&searchType=lastname'; 
var jqxhr = $.ajax({type:"GET", 
url: ajax_url, 
dataType:"jsonp text", 
callback: "whatever", 
success:function(responseData) { 
    $('div#content').text(responseData.slice(0, 100)); 
    dbg(responseData.slice(0,100)); 
}}) 
.success(function() { alert("success"); }) 
.error(function(obj, errStr) { alert("error"); dbg("error: " + errStr + "test: " + test.responseText + this.responseTxt);}) 
.complete(function() { alert("complete"); }); 
+0

क्या आपने जेएस चर में अपने डेटा को एक्सेस करने का प्रयास किया है, फिर इसे जेएस टैग में संलग्न किया है। अगर यह जेएस के रूप में इसे पार्स करने की कोशिश कर रहा है तो समझ में आता है। –

उत्तर

8

आप क्या हासिल करना काम नहीं करेगा कोशिश कर रहे हैं: jsonp केवल अगर और जब सर्वर ठीक से एक जावास्क्रिप्ट समारोह कॉल में प्रतिक्रिया एम्बेड किया जा सकता है।

भले ही सर्वर ब्राउज़र को फ़ाइल भेजता है, आप सुरक्षा सीमाओं के कारण इसे एक्सेस नहीं कर पाएंगे: आप जो कुछ भी कर सकते हैं उसे एक स्क्रिप्ट (स्क्रिप्ट टैग के साथ) के रूप में निष्पादित किया जाता है या इसका उपयोग करता है एक स्टाइलशीट (एक लिंक टैग का उपयोग करके) के रूप में, लेकिन यदि आप किसी अन्य डोमेन से हैं तो कच्चे पाठ में प्रतिक्रिया का निरीक्षण करने में सक्षम नहीं होंगे।

मुझे लगता है कि आपने डेटा को सीधे XML के रूप में प्राप्त करने का प्रयास किया है और यह विफल रहा है (जिसका अर्थ है कि साइट CORS का समर्थन नहीं करती है)। आप कोड सर्वर साइड नहीं बदल सकते हैं, तो आप केवल दो विकल्प हैं:

  1. अपने खुद के सर्वर पर एक प्रॉक्सी बनाएं कि सुरंग प्रतिक्रिया (अपने सर्वर साइड स्क्रिप्ट वास्तविक अनुरोध करता है और ब्राउज़र को भेज देता है होगा): उसी डोमेन को क्लाइंट के दृष्टिकोण से लागू किया जाएगा और आप एक्सएमएल,
  2. ब्राउज़र के सुरक्षा को बाईपास करने के लिए फ्लैश का उपयोग करने में सक्षम होंगे (आप flXHR का उपयोग कर सकते हैं लेकिन यह अब थोड़ा दिनांकित प्रतीत होता है) ।
+0

धन्यवाद! हां, मुझे यही संदेह है। मैंने सीओआरएस (सर्वर निश्चित रूप से इसका समर्थन नहीं करता) और उसी मूल नीति के बारे में पढ़ा है, और पूर्व-निरीक्षण में यह समझ में आता है कि सर्वर जेसनपी को प्रतिक्रिया भेजता है, फिर भी मैं इसका निरीक्षण नहीं कर पाऊंगा। मैंने विकल्प 1 करने पर विचार किया (इसे अपने सर्वर के माध्यम से प्रॉक्सी कर रहा है) लेकिन दुर्भाग्य से मुझे क्लाइंट को प्रमाणित करने की आवश्यकता है। मैं एक शॉट flXHR दे दूंगा। एक बार फिर धन्यवाद। –

+0

क्लाइंट प्रमाणीकरण ब्राउज़र/फ़्लैश के संबंध में, आपको ब्याज का निम्न प्रश्न मिल सकता है: http://stackoverflow.com/questions/2161401/does-flash-player-transmit- सत्र- कुकीज- स्वचालित रूप से –