0

我了解如何$.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

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

4

3 回答 3

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

    var myJson; $.get(...);

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

var myJson;
$.get('url.json', function(data){
    myJson = data;
    dataIsAvailable();
});

function dataIsAvailable() {
 ... you can use myJson here
}
于 2014-03-13T19:14:22.243 回答
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
});

请注意,控制台位于 function() 内部,而不是您拥有的外部。

更新示例

于 2014-03-13T19:05:48.893 回答
0

你在错误的地方声明你的变量。如果您希望该变量可用于多个函数,则必须在这些函数之外声明它。你不需要同步运行请求来实现你想要的。

var mySettings;

$.get('my.json',function(data) { mySettings = data; });

function showSettings() {
    alert(mySettings);
}
于 2014-03-13T19:14:22.167 回答