2010-03-09 13 views
8

मैंने अभी jQuery और AJAX सीखना शुरू कर दिया है। मैं jQuery.load() के माध्यम से एक div में एक स्थानीय पृष्ठ (मेरी डिस्क पर) लोड करने में सक्षम हूं, लेकिन बाहरी साइटें काम नहीं लगती हैं। मैंने यह भी जांचने के लिए वायरशर्क का उपयोग किया है कि डेटा सर्वर से भेजा जा रहा है (यह है)। नमूना कोड नीचे है:क्या मैं AJAX के माध्यम से किसी बाहरी पृष्ठ से डेटा लोड कर सकता हूं?

<html> 
<head> 
    <script src='jquery-1.4.2.min.js'></script> 
    <script> 
     $(document).ready(function() { 
      // $('#test').load('localpage.htm'); works! 
      $('#test').load('http://www.google.com/'); // does not work! 
     }); 
    </script> 
</head> 
<body> 
<div id='test'></div> 
</body> 
</html> 

क्या यह पहली जगह ऐसा करना संभव है? यदि हां, तो कैसे?

+0

जवाब के साथ इसी तरह के सवाल http://stackoverflow.com/questions/ 2217695/कोशिश करने के लिए उपयोग-जेसन-साथ-jquery/2217707 # 2217707 – yanoo

उत्तर

3

बॉक्स के बाहर: नहीं। यह एक सुरक्षा मुद्दा है। हालांकि fewdifferentworkarounds हैं।

0

आप किसी अन्य डोमेन से अजाक्स को कॉल नहीं कर सकते। इस

+0

जेएसओएन आपकी मदद नहीं करेगा क्योंकि यह सिर्फ उदाहरण के लिए एक प्रारूप है AJAX कॉलवही मूल नीति यहां भी हमला करती है। –

+0

वह जेएसओएनपी का जिक्र कर रहा है। – SLaks

2

के लिए JSON तकनीक की जांच करें आप Same Origin Policy में चल रहे हैं। आप AJAX का उपयोग कर बाहरी डोमेन से डेटा तक नहीं पहुंच सकते हैं, इसे सुरक्षा जोखिम माना जाता है। इसके पीछे तर्क यह है कि AJAX अनुरोध ब्राउज़र द्वारा संग्रहीत कुकीज़ के साथ काम करता है - अगर मैंने facebook.com तक पहुंचने का प्रयास किया, और आप वहां लॉग इन हुए, तो कुकी भेज दी जाएगी और मुझे आपके व्यक्तिगत डेटा तक पहुंच होगी।

2

सुरक्षा कारणों से, आप किसी भिन्न डोमेन (या प्रोटोकॉल या पोर्ट) से किसी पृष्ठ का अनुरोध करने के लिए AJAX का उपयोग नहीं कर सकते हैं।

इसके बजाय, आप किसी अन्य डोमेन पर अनुरोध अग्रेषित करने के लिए अपने सर्वर पर सर्वर-साइड स्क्रिप्ट लिख सकते हैं। (यदि आप file:// यूआरएल से कोई पृष्ठ चला रहे हैं तो यह संभव नहीं है)

+0

मुझे यकीन नहीं है कि क्या आप HTTP पुनर्निर्देशन या किसी अन्य डोमेन के अनुरोधों को आगे बढ़ाने के लिए प्रॉक्सी कर रहे हैं - पूर्व काम नहीं करेगा लेकिन अग्रेषण बाद के लिए सही शब्द नहीं होगा। –

+0

@ एंडी: मेरा मतलब प्रॉक्सिंग था। सही क्रिया क्या है? – SLaks

+0

क्षमा करें, मैं वास्तव में कोई ज़रूरत नहीं है (नौकरी का तनाव, शायद? ;-))। मुझे लगता है कि अग्रेषण को एक शब्द के रूप में इस्तेमाल किया जा सकता है, लेकिन यह सिर्फ मेरे लिए गलत पढ़ा गया है और मैं लगभग डाउनवॉटेड हूं ;-) –

4

आप स्क्रिप्ट की तुलना में किसी भिन्न डोमेन पर AJAX कॉल नहीं कर सकते हैं।

<script> 
    $(document).ready(function() { 
     $('#test').load('ajax/getgoogle.php'); 
    }); 
</script> 

getgoogle.php:

<?php 

echo file_get_contents("http://www.google.com/"); 

?> 
2

अजाक्स

ऐसी बात कर रही है के लिए, आप, उदाहरण के लिए अपने स्वयं के पृष्ठ पर एक प्रॉक्सी पृष्ठ का उपयोग करने के लिए है? हाँ। एक्सएचआर? No (जब तक कि ब्राउज़र Cross-site XHR लागू नहीं करता है जो अभी तक व्यापक नहीं है)।

एक्सएचआर का उपयोग किए बिना अजाक्स के साथ डेटा प्राप्त करने के लिए बाहरी साइट को JSONP format में डेटा प्रदान करना होगा।

वैकल्पिक रूप से, आप अपने सर्वर पर सर्वर साइड स्क्रिप्ट के माध्यम से डेटा को प्रॉक्सी कर सकते हैं, इस प्रकार यह उसी मेजबान (जहां तक ​​जावास्क्रिप्ट संबंधित है) से आ रहा है।

2

नहीं, ऐसा नहीं है। Same Origin Policy पर एक नज़र डालें। जिस साइट पर आप अनुरोध करने का प्रयास कर रहे हैं उसे JSONP को काम करने के लिए सक्षम होना होगा, और आप cross-domain callback का उपयोग करेंगे। वैकल्पिक रूप से, आप अपने डोमेन पर प्रॉक्सी बना सकते हैं जो आपके AJAX अनुरोध की ओर से पृष्ठ को पकड़ लेता है।

1

लोड बजाय वेबसाइट को लोड करने के लिए सीधे

$filename = "http://www.sitename.com"; 
$handle = fopen($filename, "r"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $text .= fread($handle, 128); 
    } 
    fclose($handle); 
} 
print $text; 

संपादित की कोशिश कर के इस PHP स्क्रिप्ट: या बस file_get_contents साथ अनुचर के समाधान की तरह

+0

फॉपेन को प्राथमिकता में कर्ल का उपयोग करें: http://stackoverflow.com/questions/636678/what-are-the-important-differences-between-using-fopenurl-and-curl-in-php/637693 – Quentin

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

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