jQuery: सिंक्रोनस AJAX अनुरोध करना


187

मैंने अतीत में कुछ jQuery किए हैं, लेकिन मैं इस पर पूरी तरह से अटका हुआ हूं। मैं तुल्यकालिक अजाक्स कॉल का उपयोग करने के पेशेवरों और विपक्षों के बारे में जानता हूं, लेकिन यहां इसकी आवश्यकता होगी।

रिमोट पेज लोड किया गया है (फायरबग के साथ नियंत्रित), लेकिन कोई रिटर्न नहीं दिखाया गया है।

अपने कार्य को ठीक से वापस करने के लिए मुझे क्या करना चाहिए?

function getRemote() {

    var remote;

    $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

    return remote;

}

आप कोड ठीक लग रहा है। यह क्या है? क्या कोई js त्रुटियाँ हैं?
शंकरसंगोली

11
मैं इसे विडंबनापूर्ण मानता हूं - आप पूछ रहे हैं कि "असिंक्रोनस जावास्क्रिप्ट एंड एक्सएमएल" ऑपरेशन कैसे करें, सिंक्रोनाइज़ करें। क्या आप वास्तव में प्रदर्शन करने की जरूरत है एक "SJAX" है।
विटालिबी

3
नोट: कल्पना ने तुल्यकालिक AJAX अनुरोधों को हटाना शुरू कर दिया है।
लेओ लैम

2
ऐसा लगता है कि बयान "[सिंक्रोनस] की आवश्यकता होगी" जावास्क्रिप्ट इंजन की समझ की कमी को इंगित करता है, इस प्रकार एक खराब आर्किटेक्चर वाला ऐप। मैं यह समझना चाहूंगा कि क्या ऐसे मामले हैं जहां सिंक की आवश्यकता है।
दोपहर

15
@pm seems that the statement "[synchronous] will be required" indicates a lack of understanding of JavaScript engines, thus a poorly architected app.या बहुत अच्छी समझ: यदि आप AJAX कॉल करना चाहते हैं, तो onbeforeunloadएक सिंक्रोनस अनुरोध का उपयोग करना वास्तव में अनुशंसित तरीका है (जैसा कि ब्राउज़र विंडो अन्यथा अनुरोध वापस आने से पहले चला जाएगा)। किसी भी तरह से वह स्पष्ट रूप से कहता है `मुझे पता है कि तुल्यकालिक अजाक्स कॉल का उपयोग करने के पेशेवरों और विपक्षों के बारे में ... शायद बस उसे विश्वास है?
स्टिजन डे विट

जवाबों:


297

जैसा कि आप एक तुल्यकालिक अनुरोध कर रहे हैं, वह होना चाहिए

function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false
    }).responseText;
}

उदाहरण - http://api.jquery.com/jQuery.ajax/#example-3

कृपया ध्यान दें: async संपत्ति को गलत पर सेट करना पदावनत किया जाता है और निकाले जाने ( लिंक ) की प्रक्रिया में होता है । यदि आप इसका उपयोग करते हैं तो फ़ायरफ़ॉक्स और क्रोम सहित कई ब्राउज़र पहले ही कंसोल में चेतावनी छापना शुरू कर चुके हैं:

क्रोम:

मुख्य थ्रेड पर सिंक्रोनस XMLHttpRequest अंत उपयोगकर्ता के अनुभव के लिए हानिकारक प्रभावों के कारण हटा दिया गया है। अधिक मदद के लिए, https://xhr.spec.whatwg.org/ देखें

फ़ायरफ़ॉक्स:

मुख्य थ्रेड पर सिंक्रोनस XMLHttpRequest अंत उपयोगकर्ता के अनुभव के लिए हानिकारक प्रभावों के कारण हटा दिया गया है। अधिक मदद के लिए http://xhr.spec.whatwg.org/


16
ध्यान दें कि responseTextहमेशा एक स्ट्रिंग लौटाता है। यदि आप JSON की उम्मीद कर रहे हैं, तो $.ajaxसाथ लपेटें JSON.parse
usandfriends

6
नोट: xhr.spec.whatwg.org/#the-open()-method सिन्क्रोन्यूस अनुरोधों को पदावनत कर दिया जाता है ...
Teynon

5
@ टॉम और इसलिए टैग <i>और <b>टैग थे । मेरी सिफारिश: इन सुविधाओं का उपयोग करते रहें ताकि वे दूर न जाएं।
स्टिजन डे विट

1
चूंकि यह ब्राउज़र को लॉक करता है, इसलिए टाइमआउट जोड़ने के लिए समझ में आता है: 5000 या तो विकल्प।
13

1
@usandfriends पार्स स्ट्रिंग के लिए ऑब्जेक्ट JSON.parseJSON के बजाय JSON.parse stackoverflow.com/questions/10362277/… के
8

33

आप ajax फ़ंक्शन का गलत तरीके से उपयोग कर रहे हैं। चूंकि यह तुल्यकालिक है इसलिए यह डेटा इनलाइन को वापस लौटा देगा:

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;

17

कितना दूरस्थ है? क्या यह उसी डोमेन से है? कोड ठीक लग रहा है

इसे इस्तेमाल करे

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;

हां! एक ही डोमेन और सब कुछ। remote_urlठीक से परिभाषित किया गया है और AJAX कॉल को ठीक से किया गया है जैसा कि उल्लेख किया गया है (फायरबग के साथ नियंत्रित)। बस कोई वापसी नहीं!
इंडस्ट्रियल

3
function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success: function (result) {
            /* if result is a JSon object */
            if (result.valid)
                return true;
            else
                return false;
        }
    });
}

7
कृपया कुछ स्पष्टीकरण शामिल करें कि इससे ओपी को कैसे मदद मिलेगी।
क्रिलगर

सर्वर की तरफ से एक जोंस ऑब्जेक्ट को वापस करने के लिए यह अच्छा अभ्यास है। यह आपको अधिक नियंत्रण प्रदान करता है। लेकिन, आपको अपने $ .ajax मापदंडों के ऊपर डेटा टाइप: "json" जोड़ना होगा।
jjwdesign

इसका क्या मतलब है: "यह आपको अधिक नियंत्रण देता है"?
अनुदान

3
संबंधित नहीं है, लेकिन आप कर सकते हैं: result.valid; // यह पहले से ही एक बूलियन है
dpineda
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.