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