2012-10-25 20 views
8

हाल ही में मुझे एहसास हुआ कि मुझे क्रॉस डोमेन पोस्ट अनुरोध करने के लिए jQuery के $.ajax के बजाय easyXDM का उपयोग करने की आवश्यकता है। मिलने के बाद easyXDM की स्थापना मुझे लगता है कि कार्यों काफी बारीकी से लाइन अप देखें:मैं easyXDM के साथ AJAX पोस्ट के माध्यम से कुंजी-मूल्य जोड़े के रूप में जावास्क्रिप्ट ऑब्जेक्ट/सरणी कैसे भेज सकता हूं?

jQuery:

$.ajax({ 
    url: "/ajax/", 
    method: "POST", 
    data: myData 
}); 

easyXDM:

xhr.request({ 
    url: "/ajax/", 
    method: "POST", 
    dataType: 'json', // I added this trying to fix the problem, didn't work 
    data: myData 
}); 

MyData है सेटअप कुछ की तरह:

myData = {}; 
myData[1] = 'hello'; 
myData[2] = 'goodbye'; 
myData[3] = {}; 
myData[3][1] = 'sub1'; 
myData[3][2] = 'sub2'; 
myData[3][3] = 'sub3'; 

जब मैं jQuery के साथ अनुरोध करता हूं तो यह उप फ़ील्ड को सही तरीके से संभालता है, लेकिन easyXDM के साथ नहीं। और

screenshot-with-shadow.png http://img37.imageshack.us/img37/4526/screenshotwithshadow.png

यहाँ है कि यह कैसे easyXDM साथ में आता है:

यहाँ कैसे पोस्ट अनुरोध jQuery के साथ सर्वर में आता है

screenshot-with-shadow.png http://img204.imageshack.us/img204/4526/screenshotwithshadow.png

मैं एक भेज सकते हैं कैसे jQuery की तरह एक easyXDM/XHR अनुरोध के माध्यम से जावा -स्क्रिप्ट ऑब्जेक्ट/कुंजी-मूल्य जोड़े की सरणी करता है?

+0

डॉक्स से: "यदि यह सेट न easyXDM देशी JSON ऑब्जेक्ट का उपयोग करने की कोशिश करेंगे", इसलिए जब तक आप serializer अधिभावी कर रहे हैं तो आपके वस्तु बाहर आने के रूप में आप उम्मीद करनी चाहिए? शायद आपके पिछले कोड में कहीं भी जबरदस्ती हो रही है? – robC

+1

ऐसा लगता है कि यह easyXDM के साथ एक समस्या हो सकती है। ऐसा लगता है कि cors/index.html फ़ाइल में यह डेटा को पहले से जांचने के बिना डेटा को आजमाने और क्रमबद्ध करने की कोशिश करेगा और यह बहु-स्तर JSON एन्कोडिंग को संभालने वाला प्रतीत नहीं होता है ... https: // github। com/oyvindkinsey/easyXDM/issues/199 – cwd

+1

@robC - अब आपकी हटाई गई टिप्पणी के बारे में मुझे लगता है कि यह easyXDM के साथ एक मुद्दा है - मेरा परीक्षण देखें http://pastebin.com/0eusK2vr – cwd

उत्तर

4

easyXDM की सीमाओं के प्रकाश में टिप्पणी में चर्चा की, एक ही रास्ता आप इसका इस्तेमाल कर सकते हैं जब इसे पारित यानी

xhr.request({ 
    url: "/ajax/", 
    method: "POST", 
    data: {jsonData: JSON.stringify(myData)} 
}); 

.request को वैकल्पिक रूप से आप अपने खुद के बना सकते हैं अपने डेटा को मैन्युअल क्रमानुसार करने होगा पोस्ट मैसेज समाधान लेकिन आप आईई 7 और नीचे छोड़ देंगे।

+0

यह एक चालाक कामकाज की तरह दिखता है जब तक कि उस मुद्दे को उम्मीदपूर्वक हल नहीं किया जाता है। मुझे इसे एक मौका और देना होगा। –

+0

वास्तव में बहुत चालाक! सबसे आसान समाधान, कम से कम अभी के लिए! धन्यवाद! :) –

+0

@SteveBrown आई 7 के लिए एक JSON कार्यान्वयन शामिल करना न भूलें! https://github.com/douglascrockford/JSON-js – robC

2

मुझे लगता है कि आप AJAX के माध्यम से एक अनुरोध क्रॉस-डोमेन भेजने के बारे में गलत हैं। आप वास्तव में जावास्क्रिप्ट एपीआई के बावजूद AJAX के माध्यम से एक अनुरोध क्रॉस-डोमेन भेज सकते हैं। हालांकि, प्रतिक्रिया क्रॉस-डोमेन प्राप्त करने के लिए, प्रतिक्रिया डेटा प्रकार JSONP होने की आवश्यकता है।

JSONP बस गद्दी के साथ JSON, उदाहरण के लिए है:

JSON:

{ Key: "Hello", Value: "World" } 

JSONP:

callback({ Key: "Hello", Value: "World" }) 

यह एक सूक्ष्म अंतर लेकिन JSONP द्वारा गुजरता है ब्राउज़र समान मूल नीति और आपको किसी अन्य सर्वर द्वारा प्रदत्त JSON डेटा का उपभोग करने की अनुमति देता है।

jQuery AJAX के माध्यम से किसी अन्य सर्वर से आ रही JSON डेटा का उपभोग करने के लिए इस प्रयास करें: काम करने के लिए आपको लगता है कि अपने वेब सेवा के रूप में JSONP और नहीं JSON परिणाम लौटा रहा है यह सुनिश्चित कर लें चाहिए

$.ajax({ 
    url: "http://mydomain.com/Service.svc/GetJSONP?callback=callback", 
    dataType: "jsonp", 
    data: myData, 
    success: function(data) { 
     alert(data); 
    } 
}); 

इसके लिए।

+0

easyXDM पोस्ट मैसेज के साथ एक छुपा आईफ्रेम का उपयोग करता है, जेसनपी नहीं! – robC

+0

मैं easyXDM का उपयोग करने की कोशिश कर रहा हूं क्योंकि jQuery के क्रॉस डोमेन AJAX अनुरोध सभी ब्राउज़रों में समर्थित नहीं हैं। –

+0

@SteveBrown JSONP सभी ब्राउज़रों में काम करेगा। लेकिन आप पोस्ट का उपयोग नहीं कर सकते हैं इसे एक जीईटी अनुरोध होना है। – robC

1

easyXDM ठीक से क्रमानुसार नहीं कर सकते हैं जैसा कि आप मैन्युअल रूप से डेटा को क्रमानुसार करने की जरूरत है:

JSON.stringify(myData) 

के बाद से अनुरोध अब बल्कि वस्तु से एक json स्ट्रिंग में शामिल होंगे तो index.html json संरचना बनाने के लिए गुणों को पार्स नहीं करना चाहिए । index.html कि easyXDM के साथ आता है पर जाएं और निम्न कोड का पता लगाने:

var pairs = []; 
for (var key in config.data) { 
    if (config.data.hasOwnProperty(key)) { 
     pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(config.data[key])); 
    } 
} 
data = pairs.join("&"); 

पोस्ट अनुरोध के एक मामले में इस कोड को निष्पादित न करें। बस आंकड़ों के config.data आवंटित:

data = config.data; 

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

  • कोई संबंधित समस्या नहीं^_^