【问题标题】:Where Have I gone wrong with this Javascript JSON parsing [closed]这个Javascript JSON解析我哪里出错了[关闭]
【发布时间】:2013-02-06 05:06:43
【问题描述】:

我正在尝试使用 javascript 解析 JSON 文件并仅显示数组中的图像。我在这里做错了什么,我将如何解决它? 执行代码时屏幕没有输出。我以为这会输出图像,但什么都没有发生。

HTML:

<!DOCTYPE html>
<html>

<script 'type=text/javascript' 'src=js.js'></script>
<script  type="text/javascript" src="ajax link was here"></script>
  <head lang="en">
    <meta charset="utf-8">
    <title>images</title>
  </head>

  <body>

    <div class = "movie">

    </div>


  </body>

</html>

Javascript 文件

$(document).ready(function () {

    $.get('http://54.243.128.130/search/movies_list/?q=inception', function (data, image) {

        var movie = JSON.parse(data);

        for (var x = 0; x < movie.length; x++) {
            var mov = movie[x];
            //var elm = '<div class = "movie"><img src = "'+mov.img+'"></div>';
            var elm = mov.img;
            $('.movie').prepend(elm);

        }

    }, 'text');

});

提前感谢您的帮助。

【问题讨论】:

  • 似乎有什么问题?
  • 我不知道,你哪里出错了?你遇到了什么错误?你的预期结果是什么? 实际结果是什么?它们有何不同?在这里给我们一些东西
  • 很可能,如果您的服务器返回 JSON 标头,则数据变量已经转换为数组
  • 这主要是跨域问题吗? (忽略您遇到的语法错误以及您正在迭代错误的数据集的事实)。
  • 可能。如果您希望循环查看结果,@MrGuy 应该查看movie.results,不过...

标签: javascript jquery json parsing


【解决方案1】:

无需解析自己,只需使用$.getJSON

$.getJSON('http://54.243.128.130/search/movies_list/?q=inception', function (data, image) {

    for (var x = 0; x < data.length; x++) {
        var mov = data[x];
        //var elm = '<div class = "movie"><img src = "'+mov.img+'"></div>';
        var elm = mov.img;
        $('.movie').prepend(elm);

    }

}

此外,您的结构错误。该页面返回如下内容:

{
   "query": "the value of your q parameter"
   "results": []
}

因此,您还需要修改循环和数据访问。所以把它放在一起:

$.getJSON('http://54.243.128.130/search/movies_list/?q=inception', function (data, image) {

        var movies = data.results;

        for (var x = 0; x < movies.length; x++) {
            var mov = movies[x];
            //var elm = '<div class = "movie"><img src = "'+mov.img+'"></div>';
            var elm = mov.img;
            $('.movie').prepend(elm);

        }

    }

最后,如果这与您的代码不在同一台服务器上,您将需要使用 jsonp 或创建本地代理来发出外部请求。

【讨论】:

  • 它根本没有输出任何东西。加载时页面上没有任何显示
【解决方案2】:

JSON.parse 函数返回字典而不是数组。所以假设我们有一个字典作为 JSON.parse 的输出:
var 电影={a:1,b:2,c:3};
然后你应该像这样迭代它:

for(var i=0;i<Object.keys(movie).length;i++){
    var mov = movie[Object.keys(movie)[i]];
    var elm = mov.img;
    $('.movie').prepend(elm
}

【讨论】:

  • 它们在 JS 中被称为 objects,而不是字典。
  • 另外,如果字符串类似于"[1,2,3]",那么JSON.parse 确实会返回一个数组
  • 糟糕,抱歉。 2 大错误,谢谢大家 :)
【解决方案3】:

对于初学者,您可能需要更改

<script 'type=text/javascript' 'src=js.js'></script>

<script type="text/javascript" src="js.js"></script>

您能描述一下您遇到的错误/问题吗?

【讨论】: