2009-11-26 21 views
7

मैं एक सेवा 'ए' कॉल करने के लिए $ .get बना रहा हूं। सेवा 'ए' सादा पाठ देता है जो मैं पृष्ठ पर प्रदर्शित करता हूं। लेकिन कभी-कभी यह सेवा 'बी' पर रीडायरेक्ट करता है जो सादा पाठ देता है। लेकिन, मैं सेवा 'बी' के प्रतिक्रिया पाठ को संभालने में असमर्थ हूं। मैं उसको कैसे करू?संभाल jquery AJAX रीडायरेक्ट

उत्तर

0

यदि सेवा बी विभिन्न डोमेन पर सुन रहा है, तो ऐसे क्रॉस-डोमेन AJAX कॉल वर्जित हैं, जब तक कि crossdomain.xml फ़ाइल इसे अनुमति न दे।

+0

मैं क्रॉस डोमेन कॉल ('ए' और 'बी' रिटर्न जेसन टेक्स्ट वास्तव में) बनाने के लिए जेसनपी का उपयोग कर रहा हूं। .. और 'ए' एक अलग डोमेन पर भी है। – akula1001

+0

हम्म।क्या आपने ब्राउजर से आने वाले अनुरोधों का पता लगाने की कोशिश की है? – PanJanek

5

मैं साबित नहीं कर सकते, लेकिन मुझे आशा है कि इस स्क्रिप्ट एक हल करने में मार्गदर्शन कर सकते हैं:

आप अपनी स्थिति मतभेद या "a.php"

से प्रतिक्रिया के प्रत्येक प्रकार पर पाठ को साबित करने के लिए होता है
$.ajax({ 
    type: "GET", 
    url: "a.php", 
    complete: function (XMLHttpRequest, textStatus) { 
    if (XMLHttpRequest.status!=200) // or responseText 
    { 
     var fn = arguments.callee; 
     var _this = this; 
     setTimeout(function(){fn.call(_this, XMLHttpRequest, textStatus);}, 200); 
    } 
    else 
    { 
     //ok 
    } 
    } 
}); 

या संपादित करें:

complete: function xCompleteFunction(XMLHttpRequest, textStatus) { 
    if (XMLHttpRequest.status!=200) // or responseText 
    { 
     var _this = this; 
     setTimeout(function(){xCompleteFunction.call(_this, XMLHttpRequest, textStatus);}, 200); 
    } 
    else 
    { 
     //ok 
    } 
    } 

function call to itself

संपादित द्वितीय:

redirect.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<title></title> 
<script type="text/javascript"> 
$(function(){ 
    $("#senddata").click(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "a.php", 
      complete: function xCompleteFunction(XMLHttpRequest, textStatus) { 
       $("#info").append(""+XMLHttpRequest.status+"<br />"+XMLHttpRequest.responseText+"<br>"); 
       if (XMLHttpRequest.status==301) // or responseText 
       { 
        var _this = this; 
        setTimeout(function(){xCompleteFunction.call(_this, XMLHttpRequest, textStatus);}, 200); 
        $("#info").append("waiting redirect<br>"); 
       } 
       else 
       { 
        $("#info").append("redirect ok<br>"); 
       } 
      } 
     }); 
    }); 
}); 
</script> 
</head> 
<body> 
<button id="senddata">send ajax request</button> 
<pre id="info"></pre> 
</body> 
</html> 

a.php:

<?php 
for($a=0;$a<1000000;$a++) 
{ 
    //wait 
} 
header('Location: b.php'); 

b.php:

<?php 
    print "hola mundo"; 

महत्वपूर्ण:Status Code Definitions

+0

मैंने इसे कॉपी करने और उपयोग करने की कोशिश की लेकिन यह काम नहीं कर रहा था। मैं ज्यादा नहीं समझ सकता। क्या आप कृपया इस कोड को समझा सकते हैं? मैं जावास्क्रिप्ट के लिए पूरी तरह से नया हूँ। – akula1001

0

सेवा 'ए' और 'बी' की प्रकृति क्या है? एक neater समाधान विसंगति सर्वर-पक्ष को संभालने के लिए होगा। उदाहरण के लिए, यदि सेवा ए,

<?php 

if(prerequisite for display service A plain text){ 

    echo "service a plain text"; 

}else{ 

    echo "service b plaint text"; 

} 

?> 

वैकल्पिक रूप से एक PHP स्क्रिप्ट है ... अगर इन सेवाओं पाठ फ़ाइलें होती हैं, यदि आप किसी तृतीय फ़ाइल है कि निर्णय करता है हो सकता है, और सेवा ए या बी निर्भर करता है भी शामिल है। उदाहरण के लिए, इस ajax.php हो सकता है, और आप सभी मामलों में ajax.php कहेंगे:

<?php 

if(prerequisite for displaying service A plain text){ 

    echo file_get_contents("a.txt"); 

}else{ 

    echo file_get_contents("b.txt"); 

} 

?> 

से यह कैसा लगता है, अपने सशर्त file_exists("a.txt") होगा, लेकिन है कि मेरी ओर से सिर्फ एक अनुमान दिया है।

शुभकामनाएँ, और अगर आपके कोई प्रश्न हैं तो टिप्पणी करें!

+0

नहीं, ऐसा नहीं है कि यह कैसे काम करता है। एप्लिकेशन को सीएएस के साथ एकीकृत किया गया है, इसलिए 'ए' के ​​लिए अनुरोध सीएएस को रीडायरेक्ट का कारण बनता है जो प्रमाणित करता है और फिर 'ए' पर एक और रीडायरेक्ट करता है। मैं फ़ायरबग का उपयोग कर रीडायरेक्ट देख सकता हूं लेकिन हैंडलर में jquery में नहीं। – akula1001

2

आप जावास्क्रिप्ट में ऐसा नहीं कर सकते हैं। आप अपने सर्वर-साइड व्यवहार को बदल सकते हैं।

मूक (पारदर्शी) पुनर्निर्देशन XMLHttpRequest विनिर्देश का हिस्सा है (here देखें विशेष रूप से शब्द "... पारदर्शी रूप से रीडायरेक्ट का पालन करें ...")। मानक केवल तभी उल्लेख करता है कि उपयोगकर्ता एजेंट (वेब ​​ब्राउज़र) कुछ प्रकार के स्वचालित पुनर्निर्देशन को रोक या सूचित कर सकता है, लेकिन यह XMLHttpRequest का हिस्सा नहीं है। यह HTTP क्लाइंट कॉन्फ़िगरेशन (ओएस कॉन्फ़िगरेशन) या वेब ब्राउज़र कॉन्फ़िगरेशन का हिस्सा है