jquery - क्या GetJSON का कोई संस्करण है जो कॉल का उपयोग नहीं करता है?




(4)

JQuery स्रोत कोड को देखते हुए, यह सब $.getJSON करता है:

getJSON: function( url, data, callback ) {
    return jQuery.get(url, data, callback, "json");
},

और यह सब $.get करता है:

get: function( url, data, callback, type ) {
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        callback = data;
        data = null;
    }

    return jQuery.ajax({
        type: "GET",
        url: url,
        data: data,
        success: callback,
        dataType: type
    });
},

वहां कोई काला जादू नहीं है। चूंकि आपको मूल $.getJSON कार्यक्षमता के अलावा अन्य चीजों को कस्टमाइज़ करने की आवश्यकता है, $.getJSON आप निम्न-स्तर $.ajax फ़ंक्शन का उपयोग कर सकते हैं और async विकल्प को गलत के रूप में पास कर सकते हैं:

$.ajax({
    type: 'GET',
    url: 'whatever',
    dataType: 'json',
    success: function() { },
    data: {},
    async: false
});

मैं एक तृतीय पक्ष जावास्क्रिप्ट लाइब्रेरी के लिए कॉलबैक लागू कर रहा हूं और मुझे मान वापस करने की आवश्यकता है, लेकिन मुझे सर्वर से मूल्य प्राप्त करने की आवश्यकता है। मुझे ऐसा कुछ करने की ज़रूरत है:

3rdPartyObject.getCustomValue = function {
   return $.getJSON('myUrl');
}

GetJson XMLHttpRequest का उपयोग करता है जो (मुझे विश्वास है) में समकालिक और असीमित व्यवहार दोनों हैं, क्या मैं सिंक्रोनस व्यवहार का उपयोग कर सकता हूं?


अगर किसी को कभी रेल में ऐसा करना है, तो मेरे पास इस तरह का एक साफ साफ तरीका है:

इस तरह अपने नियंत्रक सेटअप करें:

def my_ajax_action

    respond_to do |format|
      # if you use render, you won't need a view page, the ":json =>" part takes care of all 
      # the formatting
      format.json { render :json => @variable_containing_json }
    end

end

जावास्क्रिप्ट में कॉल सेटअप करें

function doAjaxWork( ) {

    var ret;

    $.ajax({
        type: 'GET',
        url: '/controller/action/param',
        dataType: 'json',
        complete: function(response) {
           ret = eval('(' + response.responseText + ')');
        },
        async: false
    });


    return ret;
}

बेशक, इस सिंक सामान को तब तक न करें जब तक आपको करना न पड़े। ओह और जब मैं इसमें यूआरएल के साथ जावास्क्रिप्ट दिखा रहा हूं, तो JSRoutes ... यह इन्हें वास्तव में साफ करता है।


एसिंक संपत्ति का दायरा वैश्विक है, आपकी विधि कॉल को सिंक्रनाइज़ कर देगी।


लेकिन जब तक मैं गलत नहीं हूं यह कोड काम नहीं करेगा:

3rdPartyObject.getCustomValue = function {
  var json = $.ajax({
    type: 'GET',
    url: 'whatever',
    dataType: 'json',
    success: function() { },
    data: {},
    async: false
  });

return json;
}

$ .ajax XHR ऑब्जेक्ट को पार्स किए गए जेसन ऑब्जेक्ट को वापस नहीं देता है।

आपको कुछ और करने की आवश्यकता होगी:

var jsonLoader = function(url){
    this.url = url;
    this.rawData = {};
    this.getRawData();
};

jsonLoader.prototype.getRawData = function(){

    var json = $.ajax({
        type: 'GET',
        url: this.url,
        dataType: 'json',
        success: this.getRawData(this),
        data: {},
        async: false
    });
};

jsonLoader.prototype. getRawData = function(self){
    return function(json){self.rawData = json;};
};

var loadMe = new jsonLoader("Data.json");
loadMe.rawData //has the parsed json object

असल में शायद इसे प्राप्त करने का एक बहुत ही साफ तरीका है





json