2015-01-12 8 views
10

मैं पालन Backbone.js कोड हैबैकबोन संग्रह में JSON नहीं लाई जा सकती

var List = Backbone.Collection.extend({ 
    model: Item, 
    url: '/api/items', 
}); 

और उसके बाद मेरे विचार में मैं एपीआई से JSON लाने और मॉडलों को भरने के लिए निम्न कार्य करने की कोशिश कर रहा हूँ

this.collection = new List(); 

var that = this; 
this.collection.fetch({ 
    success: function() { 
     that.render(); 
     console.log('Fetch successful!'); 
    }, 
    error: function() { 
     console.log('Failed to fetch!'); 
    } 
}); 

हालांकि लाने काम नहीं कर रहा है और इसके ट्रिगर "प्राप्त करने में विफल!" संदेश। क्या कोई भी कुछ देख सकता है जो मैं गलत कर रहा हूं? यदि मैं अपने ब्राउज़र में api/items पर जाता हूं तो मुझे JSON फ़ाइल डाउनलोड करने के लिए कहा जाता है, इसलिए यह निश्चित रूप से वहां होता है और जब मैं इसे अपनी नई लाइन को सीमित करता हूं। नीचे है कि वापस JSON भेजता

res.writeHead(200, { 
    'Content-Type': 'application/x-json-stream' 
}); 

setTimeout(function() { 
    var i; 
    for (i=0; i<limit; i+=1) { 
     res.write(JSON.stringify(createRandomItem(i+skip, sort)) + '\n'); 
    } 
    res.end(); 
}, 100 + Math.floor(Math.random() * 3000)); 

इसके अलावा जब मैं अनुरोध है कि एपीआई को भेजा गया था जांच करने के लिए डेवलपर टूल का उपयोग प्रतिक्रिया मैं वापस पाने के बस यादृच्छिक वर्ण हो रहा है और मैं एपीआई कोड का एक टुकड़ा है त्रुटि "सिंटैक्स त्रुटि: JSON.parse: अप्रत्याशित चरित्र"

eyJpZCI6IjAtd202MzNjYTF0Y3ZqOWs5Iiwic2l6ZSI6MTYsInByaWNlIjo5MzgsImZhY2 
+0

बस 'res.send (200, {your array/items/etc})' – benhowdle89

+0

आज़माएं, मुझे यकीन नहीं है लेकिन क्या ऐसा हो सकता है कि जेएसओएन सामग्री प्रकार स्ट्रीमिंग आपके ब्राउज़र जेएस कार्यान्वयन द्वारा समर्थित नहीं है? AFAIK, बैकबोन अनुरोध संग्रह से निपटने के लिए सरल 'XMLHttpRequest' ऑब्जेक्ट का उपयोग करता है। यदि आप सरल 'एप्लिकेशन/जेसन' प्रकार का उपयोग करते हैं तो क्या होगा? – VisioN

+0

मैंने सामग्री प्रकार को 'एप्लिकेशन/जेसन' में बदलने का प्रयास किया है, लेकिन मुझे एक ही परिणाम मिला।इसके अलावा मुझे यह इंगित करना चाहिए कि यदि संभव हो तो मैं सर्वर साइड कोड को बदलना नहीं चाहता हूं। – Bender

उत्तर

9

आपकी प्रतिक्रिया लेखन पाश, अमान्य JSON स्ट्रिंग उत्पन्न क्योंकि यह सिर्फ json वस्तुओं को श्रेणीबद्ध।

आप सरणी में सभी वस्तुओं को इकट्ठा करने और इस तरह यह stringify कर सकते हैं:

setTimeout(function() { 
    var i, data = []; 
    for (i=0; i<limit; i+=1) { 
     data.push(createRandomItem(i+skip, sort)); 
    } 

    res.write(JSON.stringify(data)); 
    res.end(); 
}, 100 + Math.floor(Math.random() * 3000)); 
+0

धन्यवाद यह काम करता है अगर मैंने सामग्री प्रकार को 'एप्लिकेशन/जेसन' में भी बदल दिया है, लेकिन क्या मैं वैसे भी बैक एंड कोड को बदले बिना काम करने के लिए इसे प्राप्त कर सकता हूं? – Bender

+1

क्या आप मूल JSON.parse' को अमान्य JSON पार्स करने में सक्षम होना चाहते हैं? मुझे विश्वास है कि यह संभव नहीं है। –

+1

@Bender, आप अनुकूलित की आवश्यकता होगी 'Backbone.sync' सादा पाठ, कुछ सीमांकक (\ N आपके मामले में),' JSON.parse' एक एक करके द्वारा विभाजित प्रतिक्रिया के रूप में सर्वर प्रतिक्रिया पढ़ने के लिए और फिर उन्हें क्लाइंट पक्ष इकट्ठा होते हैं। मुझे लगता है कि सर्वर पक्ष पर वैध JSON आउटपुट करने के लिए यह बेहतर है। – ertrzyiks

4

आमतौर पर, जब आप एक JSON.parse मिलती है: अप्रत्याशित चरित्र त्रुटि है, यह इंगित करता है कि JSON गुण डबल नहीं कर रहे हैं बोली-योग्य है, तो मूल रूप से JSON इस प्रकार दिखाई देंगे:

"{ test: 1, testing: 2 }"   *Invalid* 

या यहां तक ​​कि इस:

"{ 'test': 1, 'testing': 2 }"  *Invalid* 
इस प्रकार की की

:

'{ "test": 1, "testing": 2 }'  *Valid* 

या इस:

"{ \"test\": 1, \"testing\": 2 }" *Valid* 
3

पहली बात का पहला। आपके पास निश्चित रूप से सर्वर कॉन्फ़िगरेशन समस्याएं हैं। ऐसा लगता है जैसे आपके माइम प्रकार सेट नहीं हैं और आपके पास (संभवतः gzip) संपीड़न सक्षम है।

जेएसओएन की सेवा करने वाले यूआरएल पर ब्राउज़ करने के लिए Google क्रोम का प्रयोग करें। ब्राउजर को जेएसओएन को सादे पाठ में प्रदर्शित करने के लिए आपको संकेत दिए बिना प्रदर्शित करना चाहिए।

अगला क्रोम के लिए JSONView एक्सटेंशन प्राप्त करें। जेएसओएन की सेवा करने वाले यूआरएल पर ब्राउज़ करें। आपको मिलान करने वाले ब्रेसिज़ के साथ "सुंदर" प्रारूप में JSON देखना चाहिए।

आपके पास ऐसा करने के बाद, अपने वेब ऐप और परीक्षण पर वापस जाएं। यदि आपको अभी भी समस्याएं हैं, तो अपनी वेब सर्वर जानकारी (प्रकार और संस्करण) और कोई अन्य विशेष जानकारी पोस्ट करें। हम वहां से चले जाएंगे।

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