如何强制同步$ .get调用将文件内容加载到变量中?

时间:2014-03-13 19:00:35

标签: 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); // 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

任何其他想法在完成之前不会继续前进?

3 个答案:

答案 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)

  1. 您需要在函数范围myJson之外声明function(data) { var myJson = data; }); var,否则其他函数将无法看到它。

    var myJson; $获得(...);

  2. 同步ajax调用很糟糕。你不需要那个。您所需要的只是当数据可用于通知您应用的其他部分时。

  3. 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);
}