我有这样的事情:
<div id="content"></div>
和JS:
function getData(id) {
$.getJSON('url/to/jsondata',{id: id}, function(data) {
/** append some data to div#content **/
$('#content').data('key', 'value');
});
然后我想在脚本中获取#content的数据:
$(document).ready(function() {
getData(1); // run getData with some id
console.log($('#content').data('key'));
});
问题是在getJSON回调完成后没有运行console.log,所以我在日志中得到一个未定义的值。 哪种方法可行? 谢谢!
答案 0 :(得分:2)
您已在getJSON
来电中定义了回调。要获得结果,请将console.log代码放在与/** append some data to div#content **/
注释相同的函数中。
这里是getJSON的jQuery文档,因此您可以看到哪个是正确的参数以及如何进行布局:http://api.jquery.com/jQuery.getJSON/
答案 1 :(得分:1)
从ajax函数返回延迟对象,并在其上使用always,done或fail方法:
function getData(id) {
return $.getJSON('url/to/jsondata',{id: id}, function(data) { //return this
$('#content').data('key', data);
});
}
$(document).ready(function() {
getData('content').always(function() { //is returned as deffered object
console.log($('#content').data('key')); //runs when ajax completed
});
});
答案 2 :(得分:-1)
你应该把log-call放在回调函数中,如下所示:
function getData(id) {
$.getJSON('url/to/jsondata',{id: id}, function(data) {
/** append some data to div#content **/
$('#content').data('key', 'value');
console.log($('#content').data('key'));
});