将json从文件加载到对象中

Slo*_*ive 13 javascript jquery json object

努力将json从URL上的文件(myData.json)加载到对象中,以便我可以访问属性值.

- 数据立即加载,我在应用程序中需要它很多.

- 我将在整个应用程序中访问数据,而不仅仅是在数据加载后立即发生的一个函数的一部分.

- 我确保我文件中的数据格式正确json.

按照jquery API上的示例,我不应该做一些简单的事情:

警报(jqxhr.myProperty);

并获得价值?我在这里错过了什么一步?我试过运行eval和各种各样的东西

var myObj = JSON.parse(jqxhr);

无济于事.

求求你了,谢谢你.

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
Run Code Online (Sandbox Code Playgroud)

Fre*_*all 12

我觉得你太复杂了:)

 var JSON;

 $.getJSON('example.json', function(response){
       JSON = response;
       alert(JSON.property);
 })
 //feel free to use chained handlers, or even make custom events out of them!
 .success(function() { alert("second success"); })
 .error(function() { alert("error"); })
 .complete(function() { alert("complete"); });
Run Code Online (Sandbox Code Playgroud)

getJSON函数自动将您的响应转换为适当的JSON对象.无需解析.

您提到您在整个地方使用此数据,因此您必须等待ajax调用在数据可访问之前完成.这意味着要么将整个应用程序包装在getJSON回调中.或者使用自定义事件来确定如下:

 var JSON;

 $(window).on('JSONready', function(){
       alert(JSON.property);
 });

 $.getJSON('example.json', function(response){
       JSON = response;
       $(window).trigger('JSONready');
 });

 $('#elem').on('click', function(){
       //event likely to take place after ajax call has transpired
       //it would still be better to assign this listener in a callback, 
       //but you can get away with not doing it, if you put in a catch
       if(JSON){
           alert(JSON.property);
       }          
 });
Run Code Online (Sandbox Code Playgroud)

编辑

快速调试之后,数据不可用的真正原因是:使用JSON的javascript位于文件中,包括执行调用的内联javascript的页面文件NORTH.因此,JSON不是全局变量,并且范围阻止了它的使用.如果你真的需要一个变量是全局的,那么它可以与内联JS以及任何和所有包含的js文件一起使用,你可以这样做:

  (function(){
      var limitedScopeVariable = 25;
      window.globalScopeVariable = 30;
  })();

  $(function(){
       alert(globalScopeVariable); //works!
       alert(limitedScopeVariable); //fails!
  });
Run Code Online (Sandbox Code Playgroud)

编辑2

从jQuery 3.0开始,回调函数是不同的:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调方法被删除.您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()代替

来自@ mario-lurig的评论