跨域jQuery Ajax响应返回Undefined

时间:2014-08-29 21:03:07

标签: jquery ajax json

能够使用以下代码获取JSON响应:

var campaign = {id:1};
    $.ajax({
      type: 'POST',
      data: campaign,
      url: 'http://getfrontclick.com/web/track.php',

      //contentType: 'application/x-www-form-urlencoded',

      xhrFields: {
        withCredentials: false
      },

      headers: {
      },

      success: function(response) {
        $('#response pre').html( response );
      },

      error: function() {
        alert("Fail");
      }
    });

显示:

{"id":"1","username":"admin","email":"alex@xevs.com"}

我正在尝试将这些JSON项中的每一项分配到一个变量中,以便我可以单独将它们回显到页面上。不幸的是我遇到了麻烦。

如果我在"成功"下添加以下代码jQuery ajax响应的一部分,我得到" undefined"

var json_obj = $.parseJSON(response);//parse JSON

        var output="<ul>";
        for (var i in json_obj) 
        {
            output+="<li>" + json_obj[i].username + ",  " + json_obj[i].email + "</li>";
        }
        output+="</ul>";

        $("#sample").html(output);

返回:undefined, undefined undefined, undefined undefined, undefined

任何人都可以帮忙吗?这将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:2)

您正在调用的API只返回单个对象,而不是数组。因此,只需直接访问对象属性,而无需循环或索引它。由于它不是列表,因此无需使用<ul>

var json_obj = $.parseJSON(response);//parse JSON
output = json_obj.username + ",  " + json_obj.email;
$("#sample").html(output);

答案 1 :(得分:1)

成功时,很可能已经检测到的jQuery是JSON并且已经解析了response。 考虑到你发布的JSON,你不需要迭代它,没有循环(参见Barmar的回答)。

但是考虑到你的JSON是一个正确的数组,它看起来像这样(注意users持有一个对象数组):

{"users":[{"id":"1","username":"admin","email":"alex@xmdevs.com"}, {"id":"2","username":"user","email":"user@xmdevs.com"}]}

然后你可以像这样迭代:

var i = 0,
    userList = json_obj.users,
    userCount = userList.length,
    output = '<ul>';

for(i; i < userCount ;i++){
    output+="<li>" + userList[i].username + ",  " + userList[i].email + "</li>";
}
output+="</ul>";

不要用于in,否则它也会迭代原型属性。

答案 2 :(得分:1)

这应该有所帮助:http://jsfiddle.net/c3zxLsh6/

var obj = {"id":"1","username":"admin","email":"alex@xmdevs.com"};
for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    var val = obj[key];
    $("#myList").append("<li>" + val + "</li>");
  }
}