我可能会错过json和javascript的内容。
[{"commentText":"Testing 123","userPosted":"maxfridbe"},
{"commentText":"Testing 23","userPosted":"maxfridbe"}]
有时我会得到多个与此代码一致的响应:
function(data)
{
var sel = this;
jQuery.each(data,
function()
{
sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
});
};
有时我只得到一个违反上述代码的回复:
[{"commentText":"another test again welcom","userPosted":"maxfridbe"}]
我知道这是因为答案的处理方式与列表不同。
寻找答案,我得到了一些解决方法。任何解决方案都将不胜感激。
答案 0 :(得分:7)
在你提供的第二个例子中,它似乎只是一个只包含一个项目的数组,如果是这样,它应该可以工作,但我认为你只得到一个像这样的对象:
{"commentText":"another test again welcom","userPosted":"maxfridbe"}
如果是单个对象$.each
则迭代对象属性。
您可以使用$.isArray
检查您的data
变量是否不是数组,如果不是,则可以将其包装到单个元素数组中,因此$.each
函数仍然会按预期工作:
//..
if (!jQuery.isArray(data)) data = [data]; // if isn't an array, wrap it
jQuery.each(data, function() {
sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
});
//..
答案 1 :(得分:1)
我认为你应该在each()函数中使用一些可选参数:
function(data)
{
var sel = this;
jQuery.each(data,
function(i, item)
{
sel.append("<li>"+ item.userPosted+ "-" + item.commentText + "</li>");
});
};
使用THIS关键字会在您的案例中造成混淆
希望这有帮助
答案 2 :(得分:0)
使用CMS的解决方案让我意识到数据只是一个字符串,所以:
if (!jQuery.isArray(data)) data = eval(data);
工作,因为那时数据是一个对象。不确定为什么当有多个结果时它会为你做一个评估。