2011-04-28 33 views
140

मैं इसे गुगल कर रहा हूं और अब इस त्रुटि को मेरी बग फिक्स सूची में लंबे समय से टाल रहा हूं, लेकिन अंततः मैं सूची के अंत तक पहुंच गया हूं, आखिरी बार जिसमें से मुझे यह कार्य करने के लिए एक फ़ंक्शन वापस सही/गलत करना है कि सत्यापन सफल हुआ है या नहीं।

मैं कुछ क्षेत्रों की तुलना करने के लिए AJAX का उपयोग कर रहा हूं जो पहले से ही डीबी में हैं और डिफ़ॉल्ट रूप से $.post() विधि यह अतुल्यकालिक रूप से संचालन करती है।

मैं onSuccess पर कॉल के अंदर एक चर सेट कर रहा हूं और कॉलिंग विधि को इसके कारण प्रतिक्रिया नहीं मिलती है, इसलिए मेरे सभी जेएस/jquery पेज लोड पर विफल रहता है ... मैं पसंद करूंगा अगर मैं अभी भी उपयोग कर रहा हूं $.post विधि।

+0

Ah के लिए एसिंक्रोनोसिटी सेट कर सकते हैं, आपको इसे स्पष्ट करने के लिए कोड नमूना जोड़ना होगा। – Femi

+3

ऐसा मत करो। जब तक सर्वर उत्तर नहीं देता तब तक यह ब्राउज़र को फ्रीज कर देगा। – SLaks

+0

@Neal, कारण यह प्रश्न अनूठा है क्योंकि jQuery के पास सर्वर पेज को कॉल करने के कई तरीके हैं और मैं विशेष रूप से जानना चाहता हूं कि $ .post अनुरोध सिंक्रोनस कैसे करें, केवल एक jQuery AJAX अनुरोध – pythonian29033

उत्तर

183

jQuery < 1,8

की जाँच करें मेरा सुझाव है कि आप मई $.ajax() बजाय $.post() का उपयोग यह बहुत अधिक अनुकूलन के रूप में।

आप, $.post() बुला कर रहे हैं जैसे, इस तरह:

$.post(url, data, success, dataType); 

आप इसे अपनी $.ajax() बराबर में बदल सकता है:

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType, 
    async:false 
}); 

कृपया ध्यान दें $.ajax() पैरामीटर वस्तु के अंत में async:false

यहां आपके पास $.ajax() पैरामीटर का पूर्ण विवरण है: jQuery.ajax() – jQuery API Documentation


jQuery> = 1.8 "async: गलत" प्रतिवाद नोटिस

jQuery> = 1.8 http अनुरोध दौरान यूआई ब्लॉक नहीं है, तो हम उपयोगकर्ता बातचीत को रोकने के लिए एक समाधान का उपयोग करने के जब तक अनुरोध संसाधित हो जाता है। उदाहरण के लिए:

  • प्लगइन का उपयोग करें उदा। BlockUI;
  • $.ajax() पर कॉल करने से पहले मैन्युअल रूप से ओवरले जोड़ें, और फिर इसे हटा दें जब AJAX .done() कॉलबैक कहा जाता है।

कृपया उदाहरण के लिए this answer पर एक नज़र डालें।

+0

हम्म ... लेकिन अभी भी यह async होगा? – ken

16

यदि आप चाहते हैं एक तुल्यकालिक अनुरोध अनुरोध के लिए false करने के लिए async गुण सेट। jQuery AJAX Doc

6

Jquery दस्तावेज़ों से: आप एक सिंक्रोनस अजाक्स अनुरोध प्राप्त करने के लिए गलत होने के लिए async विकल्प निर्दिष्ट करते हैं। फिर आपकी कॉलबैक आपकी मां की कार्यवाही से पहले कुछ डेटा सेट कर सकती है।

अपने कोड है, तो सुझाव के रूप में बदल कैसा लगेगा क्या करना है:

beforecreate: function(node,targetNode,type,to) { 
    jQuery.ajax({ 
     url: url, 
     success: function(result) { 
         if(result.isOk == false) 
          alert(result.message); 
        }, 
     async: false 
    });   
} 

इस वजह $ है।AJAX एकमात्र अनुरोध प्रकार है जिसे आप

+1

यह उत्तर [इस] (http://stackoverflow.com/a/133327/3714134) उत्तर की एक प्रति प्रतीत होता है। –

+0

@ हूगोज़िंक यह निश्चित रूप से कॉपी किया गया था, लेकिन हमारे दोनों उत्तरों को jQuery दस्तावेज़ों से कॉपी किया गया था :-D – pythonian29033

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