2011-07-07 11 views
6

मेरे पास एक ऐसी स्थिति है जहां मैं jquery AJAX पोस्ट अनुरोध भेजता हूं लेकिन मेरे वेब एप्लिकेशन में, इस विशिष्ट AJAX अनुरोध के लिए हैंडलर (पोस्ट पैरामीटर प्रोसेस करने के बाद), किसी अन्य नियंत्रक में कोई कार्रवाई नहीं करेगा (नहीं सुनिश्चित करें कि इसे रीडायरेक्ट कहा जाता है) जो मूल रूप से संपूर्ण वेबसाइट पेज (जैसे पेज रीफ्रेश) प्रस्तुत करता है। लेकिन मुझे लगता है कि ब्राउज़र नए पृष्ठ की सामग्री को रीफ्रेश करने के बजाय एक ही पृष्ठ प्रदर्शित करता रहता है।jQuery अजाक्स और सर्वर से प्रतिक्रिया को रीडायरेक्ट करें

क्या कुछ गड़बड़ है? मैं इस स्थिति से कैसे निपट सकता हूं?

मुझे अपना प्रश्न संपादित करना पड़ा क्योंकि मैंने अपना AJAX कॉल बदल दिया था। ऊपर समारोह

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data 
     }); 

     return false; 
} 

चलता है जब पृष्ठ पर एक बटन क्लिक किया जाता है:

इस तरह क्या कोड दिखता है। लेकिन यह वही पेज प्रदर्शित रहता है। ब्राउजर डीबगर से पता चलता है कि इसे नई क्रिया से 200 ओके प्रतिक्रिया मिली है, जिसे पेज को रीफ्रेश करना था। मैं क्रोम ब्राउज़र का उपयोग कर रहा हूं और jquery 1.6.1

कोड नमूना में मेरे टाइपो के लिए खेद है। मैंने इसे सही किया।

+0

क्या आप अपना कोड पोस्ट कर सकते हैं? – JamesHalsall

+0

यह प्रश्न में कोड दिखाने में मदद करता है। – Kon

+0

"var = showlst ('कृपया प्रतीक्षा करें ...'); var actionType = type" किस प्रकार का है? – MLS

उत्तर

7

सर्वर एक से रीडायरेक्ट नहीं कर सकते AJAX अनुरोध। अंत में AJAX क्लाइंट (ब्राउज़र) शामिल है। अगर आप रीडायरेक्ट करना चाहते हैं तो आप इसे कर सकते हैं, लेकिन कॉलबैक में क्लाइंट साइड पर इसे करना होगा। आप उस सर्वर से ऑब्जेक्ट लौटकर ऐसा कर सकते हैं जिसमें यूआरएल है जिसे आप रीडायरेक्ट करना चाहते हैं --- फिर आप दस्तावेज़ की स्थान संपत्ति को बदलने के लिए जावास्क्रिप्ट कर सकते हैं। मुझे लगता है कि अगर आप सभी मामलों में रीडायरेक्ट नहीं कर रहे थे, या यदि आपका सर्वर साइड कॉल एक लंबी चल रही प्रक्रिया थी तो यह समझ में आएगा। यदि न तो मामला है तो अजाक्स कॉल शायद पहले स्थान पर समझ में नहीं आता है।

+0

धन्यवाद! यह जवाब काम करता है! – rjc

+0

मेरी खुशी !!!! –

1

यदि आपका कोड नमूना सटीक है, तो आप actionType पैरामीटर को अपरिभाषित या संभवतः एक वैश्विक चर type पर फिर से परिभाषित कर रहे हैं।

तो बदल देते हैं:

function chkSubmit(event, actionType) { 

के साथ:

function chkSubmit(event, type) { 
2

मैं आपके सवाल का ग़लत व्याख्या की जा सकती है, लेकिन जहां कि ajax कॉल में अपनी सफलता कॉलबैक फ़ंक्शन है? यही कारण है कि वह जगह है जहाँ आप आमतौर पर दृश्य में परिणाम प्रस्तुत करना होगा, यह भी, तो आपको त्रुटि कॉलबैक का उपयोग क्या पर कुछ डेटा प्राप्त करने के सकता है, अगर कुछ गलत हो रहा है:

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var actionType = type // per j. tuskan - looks like no such var in scope 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data, 
      success:function(the_data){ 
       alert("Now I can do stuff with the ajax response which is: "+the_data); 
      } 
     }); 

     return false; 
} 
2

@ek_ny द्वारा क्या कहा गया है इसका उदाहरण।

jQuery.ajaxSetup({ 
    complete: function (request, textStatus) { 
     // header inserted manually on the server. 
     // you should block the automatic redirect headers 
     // inserted by the server. 
     var location = request.getResponseHeader("Location"); 
     if(location) window.location = location; 
    } 
}); 
+0

मैंने आपके समाधान की कोशिश की जो सही दृष्टिकोण दिखता है लेकिन यह काम नहीं करता है क्योंकि प्रतिक्रिया http हेडर में कोई स्थान शीर्षलेख नहीं है। – rjc

+0

मेरे मामले में मैंने सीधे पूरा किया: function ... jQuery.ajaxSetup का उपयोग करने के बजाय AJAX अनुरोध के तहत ... क्योंकि मेरे सभी AJAX अनुरोध को ऐसा करने की आवश्यकता नहीं है। – rjc

+0

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

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