我理解$.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
任何其他想法在完成之前不会继续前进?
答案 0 :(得分:1)
文档示例:
$.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
});
注意控制台在函数()内,而不是在你的外面。
更新示例
答案 1 :(得分:1)
您需要在函数范围myJson
之外声明function(data) { var myJson = data; });
var,否则其他函数将无法看到它。
var myJson; $获得(...);
同步ajax调用很糟糕。你不需要那个。您所需要的只是当数据可用于通知您应用的其他部分时。
var myJson;
$.get('url.json', function(data){
myJson = data;
dataIsAvailable();
});
function dataIsAvailable() {
... you can use myJson here
}
答案 2 :(得分:0)
您在错误的地方宣布您的变量。如果希望变量可用于多个函数,则必须在这些函数之外声明它。 您不需要同步运行请求以实现您的目标。
var mySettings;
$.get('my.json',function(data) { mySettings = data; });
function showSettings() {
alert(mySettings);
}