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的评论