Jquery 有没有一个版本的$getJSON不';你不需要回电话吗?

Jquery 有没有一个版本的$getJSON不';你不需要回电话吗?,jquery,json,Jquery,Json,我正在为第三方javascript库实现回调,需要返回值,但需要从服务器获取值。我需要这样做: 3rdPartyObject.getCustomValue = function { return $.getJSON('myUrl'); } getJson使用XMLHttpRequest,它(我相信)同时具有同步和异步行为,我可以使用synchronouse行为吗?查看jQuery源代码,这些都是$。getJson可以: getJSON: function( url, data, call

我正在为第三方javascript库实现回调,需要返回值,但需要从服务器获取值。我需要这样做:

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

getJson使用XMLHttpRequest,它(我相信)同时具有同步和异步行为,我可以使用synchronouse行为吗?

查看jQuery源代码,这些都是
$。getJson
可以:

getJSON: function( url, data, callback ) {
    return jQuery.get(url, data, callback, "json");
},
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
    });
},
这就是所有的
$。get
做:

getJSON: function( url, data, callback ) {
    return jQuery.get(url, data, callback, "json");
},
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
功能以外的内容,因此只需使用低级的
$.ajax
功能并将其作为false传递:

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

但除非我弄错了,否则这个代码不会起作用:

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

return json;
}
As$.ajax返回XHR对象,而不是解析后的json对象

您需要做一些更像:

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

事实上,可能有一种更简洁的方法可以达到同样的效果。在打电话之前,您也可以使用以下方法:

var jsonObjectInstance = $.parseJSON(
    $.ajax(
        {
           url: "json_data_plz.cgi", 
           async: false, 
           dataType: 'json'
        }
    ).responseText
);
$.ajaxSetup( { "async": false } );
我不知道“async”属性的范围,我怀疑它是一个全局配置。因此,考虑在同步调用之后是否将此更改为true。

例如:

3rdPartyObject.getCustomValue = function { 
    $.ajaxSetup( { "async": false } );
    var result = $.getJSON('myUrl');
    $.ajaxSetup( { "async": true } );
    return result;
}

async属性的作用域是全局的,您的方法将同步调用。

如果有人必须在rails中执行此操作,我有一个非常简洁的方法,如下所示:

3rdPartyObject.getCustomValue = function {
   return $.getJSON('myUrl');
}
如下设置控制器:

在Javascript中设置调用


当然,除非有必要,否则不要做这些同步的事情。哦,当我展示包含URL的javascript时,请查看。。。它使这些值变得非常干净。

为什么不能使用回调函数返回/获取值?另外,尽量避免同步行为,因为它会在处理过程中锁定浏览器UI。调用代码不支持回调。当您传递
async:false
时,如何从
$获得错误消息。ajax
?这些方便的方法几乎类似于$.ajax函数的预设。只有当您使用这些精确的ajax选项时,它们才有用。