2011-09-29 15 views
5

का उपयोग करते हैं, मैं क्रॉस-डोमेन अनुरोध भेजने के लिए Ext.Ajax.request (ExtJS 3 के साथ) का उपयोग करने वाली एक स्क्रिप्ट के साथ काम कर रहा हूं - उनमें से कुछ POST अनुरोध। ExtJS3 से दूर जाने के लिए विचार किए जा रहे हैं (शायद सामान्य रूप से एक्स्टजेस से दूर चले जाएं) लेकिन XMLHttpRequest का उपयोग करने का त्वरित प्रयास काम नहीं किया; मैं उन क्रॉस डोमेन अनुरोधों को भेजने के लिए किस तकनीक का उपयोग कर रहा हूं, यह कैसे पता लगा सकता हूं?क्रॉस डोमेन POST अनुरोधों को उल्टा करना जो Ext.Ajax.request

उत्तर

-2

आप Jquery उदाहरण jsonp इस्तेमाल करने की कोशिश कर सकते हैं:

$.ajax({ 
    url: "test.php", 
    dataType: "jsonp" 
    success: function(data){ 
    console.log(data) 
    } 
}); 

या आप पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति हैडर सेट कर सकते हैं आप का अनुरोध किया सामग्री के लिए उपयोग किया है। पीएचपी उदाहरण:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
0

Ext JS 3.4 online documentationExt.Ajax वर्ग विरासत मॉडल है जो स्रोत कोड का पता लगाने के लिए इस्तेमाल किया जा सकता है के साथ प्रदान करेगा Ext.Ajax.request विधि मंगलाचरण से संबद्ध हों। हालांकि, पहिया को फिर से बनाने में अधिक समय और संसाधन खर्च करने के बजाय, मैं रिमोट स्टोर्स के लिए अपने क्रॉस-डोमेन अनुरोधों को सुविधाजनक बनाने के लिए proxy कॉन्फ़िगरेशन विकल्प के माध्यम से अपने पूर्व-मौजूदा स्टोर में मूल एक्सएस जेएस Ext.data.ScriptTagProxy कक्षा को कार्यान्वित करने का सुझाव दूंगा। नीचे मैं जो संदर्भ दे रहा हूं उसका संक्षेप उदाहरण है।

उदाहरण

var myJsonStore = new Ext.data.JsonStore 
({ 
    autoLoad : true, 
    proxy : new Ext.data.ScriptTagProxy 
    ({ 
     url : 'http://www.cross-domain.com/file.php' 
    }), 
    fields : ['myIdColumn','myCharColumn','myDateColumn'] 
}); 

अलावा

क्योंकि आप उपयोग कर Ext जे एस चेकआउट ACD (AJAX Cross Domain) पुस्तकालय कृपया से दूर जाने पर करना चाहते हैं।

+0

लेकिन मैं ExtJS का उपयोग करने से दूर जाने का इरादा रख रहा हूं ... क्या यह सुझाव नहीं है कि ExtJS का उपयोग जारी रहे? –

+0

जरूरी नहीं है। मैं यह सुझाव देने का प्रयास कर रहा था कि आप एक्सटी जेए 3.4 ऑनलाइन दस्तावेज़ीकरण का उपयोग कर 'Ext.Ajax' वर्ग विरासत मॉडल और इसके अंतर्निहित' अनुरोध 'विधि तर्क की समीक्षा करके प्रारंभ करें। वहां से शुरू करके और विरासत पदानुक्रम को समझकर आप पेड़ को आसानी से पार करने में सक्षम होना चाहिए, सुपरक्लास विधि (ओं) की पहचान और समीक्षा करना चाहिए और क्रॉस-डोमेन अनुरोधों को सुविधाजनक बनाने के लिए जिम्मेदार तर्क। मेरा उदाहरण गलत समझा जा सकता है, लेकिन इसका उद्देश्य विशिष्ट 'Ext.data.ScriptTagProxy' क्लास को इंगित करना था, जहां आप शायद जो खोज रहे हैं उसे ढूंढ सकें। –

+0

कृपया क्रॉस-डोमेन समर्थन प्रदान करने वाली बहुत सरल और हल्के जावास्क्रिप्ट AJAX लाइब्रेरी के मेरे अतिरिक्त चेकआउट को चेकआउट करें। यदि आप होमग्राउंड समाधान लिखने पर सेट हैं तो आप या तो लाइब्रेरी का उपयोग कर सकते हैं, या स्रोत कोड को संदर्भ के रूप में उपयोग कर सकते हैं। –

3

मैं वर्तमान में ExtJS 3.3.1 का उपयोग कर रहा हूं, मैंने अभी तक 4 तक स्विच नहीं किया है, लेकिन जब कोई नई परियोजना आती है तो सबसे अधिक संभावना होगी। एक्सटी स्रोत को देखे बिना मैं आपको बता सकता हूं कि वे इस कार्य को पूरा करने के लिए JSONP का उपयोग कर रहे हैं, क्रॉस-डोमेन AJAX कॉल करने का यही एकमात्र तरीका है क्योंकि जावास्क्रिप्ट को same-origin policy का पालन करना है।

क्या आप JSONP का शुद्ध जेएस कार्यान्वयन करने की कोशिश कर रहे हैं? या आप पहले से ही एक जेएस पुस्तकालय का उपयोग कर रहे हैं?

संपादित

हमारी टिप्पणियों प्रति ... वे पोस्ट अनुरोध कर रहे हैं। जेएसओएनपी के साथ यह संभव नहीं है। तो जहां तक ​​मैं कह सकता हूं, वे iframe चाल का उपयोग कर रहे हैं। यह वही चाल है जो पुराने ब्राउज़र पर "AJAX" अपलोड फ़ाइलों को उपयोग की जाती है।

This लिंक इसे और अधिक विस्तार से बताता है।

इसके अलावा, उसी विधि (iframe से, POST, फ़ाइल अपलोड करें) Valum's file uploader में उपयोग किया जाता है। ExtJS स्रोत का पालन करना बहुत आसान है।

+0

लेकिन क्या आप POST अनुरोध भेजने के लिए JSONP का उपयोग कर सकते हैं? मैं फायरबग में नेटवर्क गतिविधि देख रहा हूं और पृष्ठ क्रॉस-डोमेन POST अनुरोध –

+0

भेज रहा है अब आप मुझे उत्सुक हैं ... मुझे लगता है कि JSONP केवल GET अनुरोध भेज सकता है। मैं खुदाई करने जा रहा हूँ। –

+0

आप और मैं दोनों आदमी! –

0

JSONP एक हैक का थोड़ा सा है, लेकिन प्रयोग योग्य है।

हालांकि, यदि आप डोमेन को पार करते हुए नियंत्रित करते हैं तो CORS का उपयोग करने पर विचार करें। सीओआरएस में वेब साइट से प्रतिक्रियाओं में एक हेडर (एक्सेस-कंट्रोल-ऑब्जेक्ट-ऑरिजन) रखना शामिल है: http://enable-cors.org/

यह आईई 8+ (कैविट, नाच), फ़ायरफ़ॉक्स और वेबकिट ब्राउज़र के साथ समर्थित है।आईई चेतावनी यह है: आईईओ सीओआरएस अनुरोधों के लिए एक अलग अनुरोध ऑब्जेक्ट (XDomainRequest) का उपयोग करता है। यदि आपको ओपेरा का समर्थन करना है तो आपको JSONP या पॉलीफिल (https://github.com/gimite/web-socket-js/ जैसे कुछ का उपयोग करना होगा, जिसके लिए फ़्लैश की आवश्यकता है)।

यदि आप प्रश्न में डोमेन को नियंत्रित नहीं करते हैं, तो आप उन्हें CORS का समर्थन करने के लिए कहने का प्रयास कर सकते हैं।

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