将JSON对象传递给函数时出现问题

时间:2011-05-19 22:15:11

标签: javascript json

我只是在学习javascript,所以我想这是相对简单的,但现在已经让我烦恼了一段时间。

我有一个函数,只显示我从AJAX响应中调用的一些文本。这是我的代码。

if(this.responseText != null)
{
    var text = "<ul>";
    var object = eval("(" + this.responseText + ")");
    var track;
    for (var i = 0; i < object.length; i++)
    {
        track = object[i];
        text += "<li><img src=\"" + track.artwork_url + "\"/>";
        text += track.title;
        text += "<ul><li><a href=\"#\" onclick=\"playTrack(" + track + ");return false;\">Play</a></li>"
        text += "<li><a href=\"" + track.download_url + "?client_id=" + clientId + "\">Download</a></li></ul>"

        text += "</li>";
    }


    text += "</ul>";

    document.getElementById("content").innerHTML = text;
}

function playTrack(track)
{
     document.getElementById("content").innerHTML = "This has worked";
}

我不喜欢将track对象传递给playTrack函数(现在只显示一些文本的简单函数)。我收到错误“Uncaught SyntaxError:Unexpected identifier”

如果我传入track.id(或任何其他属性),一切正常,我不明白。

感谢您的帮助,

B先生。

4 个答案:

答案 0 :(得分:2)

您无法传递此类对象。 track正在转换为字符串,然后您的playTrack函数调用失败,因为语法错误。它将被渲染(类似onclick=playTrack([Object object]),显然不是有效的JavaScript)。传递track.id有什么问题,因为你知道它有用吗?

答案 1 :(得分:1)

@alpian和@Jim是对的,你需要将对象转换为json字符串,你可以使用http://www.json.org/js.html

...    
text += "<ul><li><a href=\"#\" onclick=\"playTrack('" + JSON.stringify(track) + "');return false;\">Play</a></li>"
...

答案 2 :(得分:0)

创建“playTrack”onclick事件时,您正在以错误的方式使用轨道变量。 “track”是一个对象,使用它作为字符串将是[Object object]。所以在你的“html”中你会有类似onclick =“playtrack([Object object])”的东西,这在语法上是错误的。

答案 3 :(得分:0)

我强烈建议使用JSON.parse()代替eval。我没有将列表条目构建为文本,而是使用document.createElement()将它们作为DOM对象,并将单击处理程序添加为addEventListener,这样您就不需要尝试包含JS对象作为HTML流中的文本。