2010-06-26 13 views
9

मेरे पास एक HTML दस्तावेज़ है, जो एक AJAX कॉल का उपयोग कर एक PHP फ़ाइल से सामग्री लोड करता है। मेरी कोड के महत्वपूर्ण बिट के नीचे है:अजाक्स कॉलिंग यूआरएल का पता लगाएं

default.html:

/*more code above*/ 
var PHP_URL = "content.php"; 
var Content = document.getElementById('Content'); 
ajaxRequest = new XMLHttpRequest(); 
ajaxRequest.onreadystatechange = 
    function() { 
     if(ajaxRequest.readyState==4) { 
      if (ajaxRequest.status==200) 
       Content.innerHTML = ajaxRequest.responseText; 
      else 
       Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>"; 
      Content.className = "Content Solid"; 
     } 
    } 
ajaxRequest.open("GET",PHP_URL,true); 
ajaxRequest.send(); 
/*more code below*/ 

पता लगाने के लिए कि यह 'default.html से बुलाया गया है' content.php 'पर फ़ाइल के लिए यह संभव है ', या एक अलग कॉलिंग दस्तावेज़ आवश्यक के रूप में?

उत्तर

13

सबसे अच्छी तरह से ज्ञात अजाक्स jQuery की तरह चौखटे के रूप में सबसे अच्छा आपके AJAX कॉल में एक अनुरोध हेडर स्थापित करने के लिए किया जाएगा और mooTools एक विशिष्ट शीर्षलेख जोड़ते हैं जिसे आप PHP के साथ देख सकते हैं:

if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0) 
{ 
    // Ajax Request 
} 
1

$_SERVER['HTTP_REFERER'] हो सकता है कि आप क्या चाहते

संदर्भ

+1

आप हमेशा HTTP_REFERER पर भरोसा नहीं कर सकते हैं। – Sjoerd

+0

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

0

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

उदाहरण के लिए:

/*more code above*/ 
var PHP_URL = "content.php?mode=AJAX"; 
var Content = document.getElementById('Content'); 
ajaxRequest = new XMLHttpRequest(); 
ajaxRequest.onreadystatechange = 
    function() { 
     if(ajaxRequest.readyState==4) { 
      if (ajaxRequest.status==200) 
       Content.innerHTML = ajaxRequest.responseText; 
      else 
       Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>"; 
      Content.className = "Content Solid"; 
     } 
    } 
ajaxRequest.open("GET",PHP_URL,true); 
ajaxRequest.send(); 
/*more code below*/ 

, तो बस का पता लगाने कि कॉल default.html से आया है पर्याप्त (और एक AJAX कॉल या एक क्लिक किया लिंक के बीच भेद नहीं), तो संदर्भ शीर्ष जाँच चाल करना होगा , जैसा कि @ जैमी वोंग द्वारा सुझाया गया है।

2

मुझे लगता है, इस तरह के

st.setRequestHeader('X-Sent-From','default.html') 
तो content.php में

,

$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html 
+0

उस बारे में सोचा नहीं था - jQuery में, क्या आप ऐसा करने के लिए 'पहले सेन्ड' कॉलबैक का उपयोग करेंगे, या क्या कोई आसान तरीका है? –

+0

मैं jquery का बहुत उपयोग करता हूं, लेकिन AJAX कॉल के लिए नहीं। फिर भी, मेरे ज्ञान के लिए, मैं पहले से उपयोग करना होगा – fabjoa

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