2009-12-01 12 views
7

मैं कुछ सादे पाठ को पुनः प्राप्त करने के लिए एक AJAX कॉल बना रही हूँ:jQuery क्यों मेरा सादा पाठ जोर देता है "अच्छी तरह से गठित" नहीं है?

$.ajax({ 
    url:   "programData.txt", 
    type:  "GET", 
    dataType: "text", 
    cache:  false, 
    success:  processData 
}); 

जब मैं अनुरोध करना है, हालांकि, मैं निम्नलिखित त्रुटि मिलती है:

Error: not well-formed Source File: file:///projects/foo/programData.txt?_=1259694590361 Line: 1, Column: 2

क्यों jQuery कार्रवाई करने के लिए कोशिश कर रहा है मेरी सादा पाठ और मैं इसे रोकने के लिए कैसे प्राप्त करूं?

+0

एक हो सकता है प्रतिक्रिया में 'सामग्री-प्रकार: एप्लिकेशन/जेसन' हेडर (या समान)? –

+0

सही सामग्री प्रकार सेट करने के लिए, मैंने अपाचे में या .htaccess में कॉन्फ़िगरेशन सेट किया है: AddType टेक्स्ट/सादा .hbs (सभी * .hbs सामग्री-प्रकार टेक्स्ट के साथ शिप करना चाहिए।) फ़ायरफ़ॉक्स खुश था। –

उत्तर

11

क्या आप अपने ब्राउज़र में पृष्ठ को HTTP पर लोड कर रहे हैं या इसे नियमित फ़ाइल के रूप में खोल रहे हैं? जावास्क्रिप्ट चलाने वाले पेज का पता http: या फ़ाइल से शुरू होता है:? मुझे संदेह है कि यह बाद वाला है, और अजाक्स उस स्थिति में अलग-अलग काम करता है (नीचे tvanfonsson द्वारा प्रतिक्रिया देखें)। यदि आप एक वेब ऐप बना रहे हैं जो बाद में HTTP पर परोसा जाएगा, तो स्थानीय HTTP सर्वर का उपयोग करके अपने पेज को चलाने का प्रयास करें।

+0

के पुराने संस्करणों से बात नहीं कर सकता वास्तव में, मैं इसे 'file: // 'पहुंच अपाचे में जाने से समस्या ठीक हो गई। –

0

समर्थित प्रकार हैं:

* "xml": Treat the response as an XML document that can be processed via jQuery. 
* "html": Treat the response as HTML (plain text); included script tags are evaluated. 
* "script": Evaluates the response as JavaScript and evaluates it. 
* "json": Evaluates the response as JSON and sends a JavaScript Object to the success callback. 

शायद अगर तुम प्रकार के रूप में एचटीएमएल निर्दिष्ट के बाद से jQuery कुछ भी पार्स नहीं लगता है "पाठ" के बजाय "html" का उपयोग करना चाहिए का उपयोग करें।

+3

http://docs.jquery.com/Ajax/jQuery.ajax#options अधिक डेटा सूचीबद्ध करने के लिए प्रतीत होता है, हालांकि मैं jQuery –

3

HTTP अनुरोध का उपयोग करते समय XMLHttpRequest के माध्यम से स्थानीय फ़ाइल खोलते समय आपको अलग-अलग प्रतिक्रिया कोड मिलते हैं। मुझे संदेह है कि चूंकि आप एक स्थानीय फाइल खोल रहे हैं, jQuery प्रतिक्रिया कोड पर चकित कर रहा है, सोच रहा है कि यह एक त्रुटि है क्योंकि यह 200 OK नहीं है।

Reference

Example: Non-HTTP synchronous request

Despite its name, XMLHttpRequest can be used for non-HTTP requests. This example shows how to use it to fetch a file from the local file system.

var req = new XMLHttpRequest(); 
req.open('GET', 'file:///home/user/file.json', false); 
req.send(null); 
if(req.status == 0) 
    dump(req.responseText); 

The key thing to note here is that the result status is being compared to 0 for success instead of 200. This is because the file and ftp schemes do not use HTTP result codes

+0

jquery 0 केस सही ढंग से संभालता है (कम से कम 1.5 करता है)। इस मामले में समस्या मुझे लगता है कि माइम प्रकार था। – studgeek

0

jQuery क्रोम और IE8 पर यह समस्या है प्रतीत नहीं होता है।

11

फ़ायरफ़ॉक्स फ़ाइल को एचटीएमएल के रूप में पार्स करने की कोशिश कर रहा है इससे पहले कि वह इसे वापस jQuery पर भी हाथ रखे।

ऐसा करने के कई कारण हैं कि यह ऐसा करने का प्रयास क्यों कर सकता है। यदि, जैसा कि जानस ने सुझाव दिया है, तो आप एक फ़ाइल का उपयोग कर रहे हैं: // या क्रोम: // यूआरएल तो उसके पास एमआईएमई प्रकार नहीं है और यह एचटीएमएल मानता है। या आपका HTTP सर्वर गलत MIME प्रकार लौटा सकता है।

jQuery 1.5.1 में शुरू करना फ़ायरफ़ॉक्स देखे गए लौटाए गए एमआईएम प्रकार को ओवरराइड करने के लिए एक माइम टाइप विकल्प है। तो आप निम्न कर सकते हैं: MIMETYPE विकल्प पर

$.ajax({ 
    mimeType: 'text/plain; charset=x-user-defined', 
    url:   "programData.txt", 
    type:  "GET", 
    dataType: "text", 
    cache:  false, 
    success:  processData 
}); 

डॉक्टर यहां http://api.jquery.com/jQuery.ajax/

पर है और क्या फ़ायरफ़ॉक्स स्तर पर चल रहा है पर कुछ पृष्ठभूमि है: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data

+0

मैं पहले से ही अपाचे के तहत था। यदि आप एक साधारण txt फ़ाइल खोलने का प्रयास करते हैं तो उसे "एक्सएमएल सिंटैक्स त्रुटि" मिल जाएगी। लेकिन यह काम किया! –

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