Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jquery.when访问json数据以附加到页面?_Javascript_Jquery_Html_Arrays_Json - Fatal编程技术网

Javascript 如何使用jquery.when访问json数据以附加到页面?

Javascript 如何使用jquery.when访问json数据以附加到页面?,javascript,jquery,html,arrays,json,Javascript,Jquery,Html,Arrays,Json,我正在创建一个函数,该函数在页面上的数据属性中查找url,然后找到数据url对象,获取该页面的url,从该页面访问json,并将其附加到动态滑块中 呈现时,数据URL如下所示: <ul id="data-urls" style="display: none;"> <li data-number="1" data-title="life-is-light" data-url="/pages/life-is-light"></li> <l

我正在创建一个函数,该函数在页面上的数据属性中查找url,然后找到数据url对象,获取该页面的url,从该页面访问json,并将其附加到动态滑块中

呈现时,数据URL如下所示:

<ul id="data-urls" style="display: none;">

    <li data-number="1" data-title="life-is-light" data-url="/pages/life-is-light"></li>

    <li data-number="2" data-title="our-biodynamics" data-url="/pages/our-biodynamics"></li>

    <li data-number="3" data-title="winemaking" data-url="/pages/winemaking"></li>

    <li data-number="4" data-title="our-land" data-url="/pages/our-land"></li>

    <li data-number="5" data-title="the-people" data-url="/pages/the-people"></li>

</ul>
这会添加正确的项目,但它们在页面刷新时有时出现错误的顺序,这是不一致的。于是我想到了使用$。但我正在努力使用的是上面的函数,我可以用这个
},'json').done(函数(){
$。当
没有简单的方法来做这件事时,当我使用
控制台.log(数据);
在上面的函数之后,我得到以下结果:

Object {page: Object}
page: Object 
author: "Kat Wiggins"
body_html: "Maecenas sed diam eget risus varius blandit sit amet non magna. Maecenas sed diam eget risus varius blandit sit amet non magna. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nulla vitae elit libero, a pharetra augue. Lorem ipsum dolor sit amet, consectetur adipiscing elit."
created_at: "2014-11-05T10:51:14-05:00"
handle: "our-biodynamics"
id: 22933611
published_at: "2014-11-05T10:50:00-05:00"
title: "Our Biodynamics"
updated_at: "2014-11-05T10:53:11-05:00"
我想使用的新函数是$。当:

$.when.apply(null, $.map($("#data-urls li"), function(elm) { return $.get($(elm).data('url')); }) ).then(function(responses) {
    $.each(responses, function(data) {
    });
});

如果不尝试对页面刷新时的html进行重新排序,也不成功地获得正确的数据,我如何才能使用与我原来使用的函数完全相同的上述函数?

您的代码几乎没有问题。唯一的问题是,当您将多个承诺传递给时,相应的响应将不以arr的形式提供是的,但是作为单独的参数。这就是为什么在你的代码
响应中
确实指的是第一个响应

尝试通过以下方式对其进行迭代:

var promises = $("#data-urls li").map(function() { 
    return $.get($(this).data('url')); 
});

$.when.apply(null, promises).then(function() {
    var responses = [].slice.call(arguments);
    $.each(responses, function(i, data) {
        console.log(data[0]); // json response
    });
});

那么问题出在哪里呢?你的代码应该可以正常工作。我猜
$中的
数据
是什么样子的。get
是一个对象,而
I
实际上是一个键,不是数组的索引,对象没有顺序,所以要解决这个问题,你应该使用数组。我无法正确输出任何json数据,结构需要修改输出json.I can console.log(响应);但它只给了我urlsadeneo链的第一个url,我已经创建的东西怎么能做到这一点?你必须将JSON更改为数组,而不是对象,因为数组在解析时会保持有序,对象必然不会,因为它们没有任何顺序。这很好,但我如何获得JSON,以便我可以访问对象精简每个数组项?是的,取决于您的JSON结构。检查控制台。例如,OK刚刚尝试了数据[0]。标题和结果JSON结构如下:
Object{page:Object}page:Object作者:“name”body_html:“created_at:“2014-11-05T10:50:35-05:00”句柄:“life is light”id:22933567published_at:“2014-11-05T10:49:00-05:00”标题:“生命是光明的”更新地址:“2014-11-06T08:05:53-05:00”
检查
控制台日志(数据[0]。页面。标题)
var promises = $("#data-urls li").map(function() { 
    return $.get($(this).data('url')); 
});

$.when.apply(null, promises).then(function() {
    var responses = [].slice.call(arguments);
    $.each(responses, function(i, data) {
        console.log(data[0]); // json response
    });
});