Javascript 如何强制同步$.get调用将文件内容加载到变量中?
我了解Javascript 如何强制同步$.get调用将文件内容加载到变量中?,javascript,jquery,ajax,json,jquery-get,Javascript,Jquery,Ajax,Json,Jquery Get,我了解$.get()如何异步获取。但是我如何强制同步呼叫呢 我要求从json文件加载的首选项在整个应用程序的许多javascript调用中使用。我如何才能不将这些首选项加载到DOM中,而是加载到整个应用程序其余部分使用的变量中 以下是它异步工作的方式: $.get('my.json',function(data) { var myJson = data; }); console.log(myJson); // undefined $('.myElement').html(myJson.title
$.get()
如何异步获取。但是我如何强制同步呼叫呢
我要求从json文件加载的首选项在整个应用程序的许多javascript调用中使用。我如何才能不将这些首选项加载到DOM中,而是加载到整个应用程序其余部分使用的变量中
以下是它异步工作的方式:
$.get('my.json',function(data) { var myJson = data; });
console.log(myJson); // undefined
$('.myElement').html(myJson.title); // this will asynchronously load the contents of myJson.title into `.myElement`
我读到我应该尝试:
$.get('my.json',WrapperFunction(data));
WrapperFunction(data) {
// do all of your javascript calls here
}
console.log(myJson); // undefined
在get完成之前,是否还有其他不继续的想法?文档中的示例:
$.get( "my.json", function( data ) {
console.log( data );
var myJson = data; // or whatever your data's format is
console.log( "Title: " + myJson.title );
$('.myElement').html( myJson.title ); // or whatever your data's format is
});
请注意,控制台位于函数()内部,而不是原来的外部
更新的示例您在错误的位置声明了变量。如果希望变量可用于多个函数,则必须在这些函数之外声明它。 您不需要同步运行请求来实现所需的功能
var mySettings;
$.get('my.json',function(data) { mySettings = data; });
function showSettings() {
alert(mySettings);
}
myJson
varfunction(data){var myJson=data;})代码>或其他函数将看不到它
var-myJson;
$.get(…)
var-myJson;
$.get('url.json',函数(数据){
myJson=数据;
数据可用();
});
函数dataIsAvailable(){
…您可以在此处使用myJson
}
尝试使用$.ajax()
而不是$.get()
。您可以使用async
标志并将其设置为false
$。get
只是$.ajax
的快捷方式,因此请改用$.ajax
。但是最好将需要访问回调中数据的所有代码移动到:$.get('my.json',function(data){var myJson=data;console.log(myJson);$('.myElement').html(myJson.title);}代码>请不要建议人们将async
设置为false。这不仅在jQuery的最新版本中被贬低了,它也是一个坏项目(tm)。异步是默认的,这是有原因的。您可以使用延迟/承诺api使逻辑稍后出现在源代码中,但您确实不应该这样做synchronous@JeremyJStarcher:公平地说,只有async
与promise API一起使用才不受欢迎:“从jQuery 1.8开始,在jqXHR中使用async:false($.Deferred)已弃用;“($.Deferred)(这并不意味着我提倡使用async
)。是的,但假设文档的其余部分(即get
之外)将立即需要数据
。@Ryan-它不能立即拥有它。如果页面加载时需要某些内容,请将其包含在页面本身中。您可以通过服务器端处理在页面上嵌入JavaScript对象。@Ryan:这就是为什么要从回调中执行其余代码的原因。JavaScript本质上是事件驱动的。强制.get()同步不是一个好主意。你真的需要同步调用吗?还是只需要确保在执行下一步之前从服务器返回数据?这很方便。我应该这样做。