将json从文件加载到对象中 [英] load json from file into object

查看:86
本文介绍了将json从文件加载到对象中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Struggling to load json from file (myData.json) on URL into an object so I can access property values.

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

-- The data loads immediately, I need it a lot in the app.

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

-- I'm going to access the data throughout the app, not just as part of one function that happens immediately after the data loads.

- 我确保了我的数据文件格式正确json。

-- I've ensured the data in my file is properly formatted json.

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

Following the example on the jquery API, shouldn't I be able to do something simple like:

alert(jqxhr.myProperty);

alert(jqxhr.myProperty);

并获取值? 我在这里错过了什么步骤?我尝试过运行eval和各种各样的事情,比如

and get the value? What step am I missing here? I've tried running eval and a variety of things like

var myObj = JSON.parse(jqxhr) ;

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"); });


推荐答案

我认为你太复杂了:)

 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"); });

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

the getJSON function automatically converts your response into a proper JSON object. No need to parse.

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

You mentioned that you are using this data all over the place, so you will have to wait for the ajax call to complete before the data is accesible. That means either wrapping your entire application in the getJSON callback. Or using a custom event to determine like so:

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

编辑

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

After a quick live debug, the real reason for the data being unavailable was this: javascript that consumes JSON was located in a file include the page document NORTH of inline javascript performing the call. As a result JSON was not a global variable, and scope prevented its usage. If you truly need a variable to be global so it can be used with inline JS as well as any and all included js files, you may do so like this:

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

  $(function(){
       alert(globalScopeVariable); //works!
       alert(limitedScopeVariable); //fails!
  });

编辑2


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

As of jQuery 3.0, callback functions are different: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callback methods are removed as of jQuery 3.0. You can use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead

来自评论@ mario-lurig

from the comments @mario-lurig

这篇关于将json从文件加载到对象中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆