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
    var
    function(data){var myJson=data;})或其他函数将看不到它

    var-myJson; $.get(…)

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

  • 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()同步不是一个好主意。你真的需要同步调用吗?还是只需要确保在执行下一步之前从服务器返回数据?这很方便。我应该这样做。