2009-04-26 15 views
9

मैं बाहरी सर्वर पर AJAX अनुरोध करने का प्रयास कर रहा हूं। मैंने अभी तक सीखा है कि मुझे सुरक्षा कारणों से ऐसा करने के लिए getJSON का उपयोग करने की आवश्यकता है?बाहरी PHP पृष्ठ पर Jquery getJSON

अब, मैं बाहरी पृष्ठ पर एक साधारण कॉल नहीं कर सकता। मैंने इसे जितना संभव हो उतना सरल बनाने की कोशिश की है लेकिन यह अभी भी काम नहीं कर रहा है। मैं 2 फ़ाइलें है, test.html & test.php

मेरी test.html परीक्षण के लिए स्थानीय होस्ट करने के लिए इस तरह एक फोन करता है,:

$.getJSON("http://localhost/OutVoice/services/test.php", function(json){ 
    alert("JSON Data: " + json); 
}); 

और मैं अपने test.php एक सरल लौटना चाहते 'परीक्षण':

$results = "test"; 
echo json_encode($results); 

मैं शायद कुछ अविश्वसनीय रूकी गलती कर रहा हूं लेकिन मुझे इसे समझने की प्रतीत नहीं हो रही है। इसके अलावा, अगर यह काम करता है, तो मैं अपने test.php पेज पर डेटा कैसे भेज सकता हूं, जैसे आप test.php? Id = 15 की तरह करेंगे?


test.html पेज स्थानीय होस्ट पर test.php पेज बुला रहा है, एक ही निर्देशिका मैं किसी भी त्रुटि, बस कोई चेतावनी नहीं मिलता है ..

+0

अनुरोध करने वाला पृष्ठ क्या है। मैं यह सुनिश्चित करना चाहता हूं कि आपके पास क्रॉस-डोमेन सुरक्षा समस्या नहीं है। – bendewey

+0

क्या आपको कोई त्रुटि मिल रही है? – SilentGhost

+0

test.html पृष्ठ localhost पर test.php पेज को कॉल कर रहा है, उसी निर्देशिका मुझे कोई त्रुटि नहीं है, बस कोई चेतावनी नहीं .. – Pmarcoen

उत्तर

16

यह हो सकता है कि आपने test.php में कॉलबैक नहीं मिला है। (अर्थात स्क्रिप्ट का उपयोग कर XMLHttpRequest के बजाय टैग कर देता है)

$results = array("key" => "value"); 
echo $_GET['callback'] . '(' . json_encode($results) . ')'; 
// the callback stuff is only needed if you're requesting from different domains 

jQuery स्वचालित रूप से JSONP पर स्विच करता है जब आप http:// का उपयोग करें: इसके अलावा, json_encode केवल एक सरणी स्वीकार करता है। यदि आपके पास एक ही डोमेन पर test.html और test.php है, तो सापेक्ष पथ (और कोई कॉलबैक नहीं) का उपयोग करने का प्रयास करें।

+1

+1। मैं सर्वर-साइड में कॉलबैक को भी लागू करने जा रहा हूं, लेकिन यदि मैं एक ही डोमेन पर क्लाइंट और सर्वर होस्ट करना चुनता हूं, तो अभी भी कॉलबैक ब्रेक का उपयोग कर रहेगा? (शायद मैं लगभग एक घंटे या उससे भी ज्यादा समय में अपने प्रश्न का उत्तर देने में सक्षम हूं ...) – opyate

+0

एक कॉलबैक हमेशा काम करेगा, भले ही आप उसी डोमेन से फ़ाइल का अनुरोध करें। ऑब्जेक्ट का अनुरोध करने और eval'ing करने के बजाय जेएसओएन कॉलबैक का उपयोग करने के लिए यह तेजी से साबित हुआ है (क्योंकि eval इतनी धीमी है)। याहू फ़्लिकर टीम ने कुछ महीने पहले इस बारे में लिखा था: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/ – moff

+2

जो आपको पूरी तरह से एक एक्सएसएस वीनरेशन तक खुलता है - http: // www।metaltoad.com/blog/using-jsonp-safely – kajo

2

सबसे सरल समाधान आपके test.php फ़ाइल में किसी भी आउटपुट से पहले नीचे कोड जोड़ना होगा, फिर आपके पास उपयोग की जाने वाली विधियों के साथ अधिक लचीलापन है, एक मानक AJAX कॉल काम करना चाहिए।

header ('Access-Control-Allow-Origin: *'); 

हालांकि, जब आपके सर्वर से डेटा आपके नियंत्रण से बाहर हो रहा है तो जेसन कॉलबैक चीज़ का उपयोग करें।

+0

+1, लेकिन आपको इसे वास्तव में उस सर्वर (सर्वर) से प्रतिबंधित करना चाहिए जिससे आप अनुरोध कर रहे हैं। इसके अलावा, इसके लिए आईई समर्थन कमजोर है, इसलिए यदि आपको ब्राउज़र समर्थन की आवश्यकता है, तो JSONP विधि के साथ जाने के लिए बेहतर है। –

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