在函数和jquery之间传递值

时间:2014-07-31 23:08:07

标签: javascript jquery ajax getjson

我很难在jQuery中处理值,因为大多数jQuery都是在外部脚本中完成的,而且我不确定我什么时候在函数中而不是在函数中,所以#&#it# 39;很难判断全局变量何时设置而未设置。

这个特别令我感到困惑,而且我完全难以理解,从逻辑上讲它应该有用,但似乎有某些东西限制它,并且无视我试图的价值观存储。

我已经得出结论,因为我遇到的错误是在第二次getJSON电话中,我得到了一个' val'未定义的问题,但Javascript控制台没有显示任何javascript错误,只是在我登录到控制台时获取未定义的日志,并在警报中打印对象。

只需要一副清新的眼睛,觉得这可能是一件简单的事,但我一直在看代码这么久以至于我无法理解它。

非常感谢任何帮助。

var post_ids = new Array();
var i = 0;
var val;

$.getJSON("/client-ajax/last-ten-posts.php", function(data){
    $.each(data, function(k, val) {
        post_ids.push(val.id);
    });
});

$.getJSON("/client-ajax/last-ten-posts.php?post-id=" + post_ids[0], function(val){
    alert(val.title+"");
    $("#postContainer").empty();
    $("#postContainer").append("<p class='title'>" + val.title + "</p><div class='post-icon'></div><pre>" + val.content + "</pre><p class='footnote'>Posted by " + val.firstname + " " + val.surname + " at <time datetime='2014-06-10'>08:52</time> GMT+00 on the <time>10-06-2014</time></p>");
});

更新:

我根据@ N0ir的回答略微编辑了代码,但没有成功。 done方法确保在异步过程完成后执行操作,但尽管如此,val仍未定义。我试过的代码在下面进行检查和传播。

$.getJSON("/client-ajax/last-ten-posts.php", function(data){
    $.each(data, function(k, val) {
        post_ids.push(val.id);
    });
}).done(function(){
    $.getJSON("/client-ajax/last-ten-posts.php?post-id=" + post_ids[0], function(val){
        alert(val.title+"");
        $("#postContainer").empty();
        $("#postContainer").append("<p class='title'>" + val.title + "</p><div class='post-icon'></div><pre>" + val.content + "</pre><p class='footnote'>Posted by " + val.firstname + " " + val.surname + " at <time datetime='2014-06-10'>08:52</time> GMT+00 on the <time>10-06-2014</time></p>");
    });
}); 

更新 - 网络JSON回电:

GET http://*****************.com/client-ajax/last-ten-posts.php [HTTP/1.1 200 OK 154ms]
GET http://*****************.com/img/home.jpg [HTTP/1.1 304 Not Modified 152ms]
GET http://*****************.com/img/about.png [HTTP/1.1 304 Not Modified 142ms]
GET http://*****************.com/img/about-repeat.jpg [HTTP/1.1 304 Not Modified 147ms]
GET http://*****************.com/img/blog.jpg [HTTP/1.1 304 Not Modified 146ms]
GET http://*****************.com/img/portfolio.jpg [HTTP/1.1 304 Not Modified 210ms]
GET http://*****************.com/img/contact.jpg [HTTP/1.1 304 Not Modified 209ms]
GET http://*****************.com/client-ajax/last-ten-posts.php [HTTP/1.1 200 OK 207ms]

2 个答案:

答案 0 :(得分:0)

你想做这样的事情:

var post_ids = new Array();
var i = 0;
var val;

$.getJSON("/client-ajax/last-ten-posts.php", function(data){
    $.each(data, function(k, val) {
        post_ids.push(val.id);
    });
    $.getJSON("/client-ajax/last-ten-posts.php?post-id=" + post_ids[0], function(result){
        alert(result.title+"");
        $("#postContainer").empty();
        $("#postContainer").append("<p class='title'>" + result.title + "</p><div class='post-icon'></div><pre>" + result.content + "</pre><p class='footnote'>Posted by " + result.firstname + " " + result.surname + " at <time datetime='2014-06-10'>08:52</time> GMT+00 on the <time>10-06-2014</time></p>");
    });
});

这样第二个getJSON调用就会在第一个调用完成后发生。

答案 1 :(得分:-1)

所以我发现了问题,结果是php的PDO中的fetchAll()返回一个数组,所以当从数组创建JSON时,需要通过数组的第一个元素访问JSON,如下所示:

val[0].content

而不是:

val.content