无法解析json

时间:2012-04-03 05:48:55

标签: javascript json

无法使用此

解析json
var res = eval('(' + response + ')');

response包含[{"total_sections":"3"}]此值。但我无法取值total_sections

function changeSection() { 
   id = document.getElementById('layoutDropdown').value; 
   $.ajax({ type: "POST",
            url:'/manage',
            data: {id : id },
            success: function(response){ 
                  alert(response); 
                  var res = eval(response);
                  alert(res[0].total_sections);                     
            } 
    }); 
} 

管理布局:

public function manageLayouts() { 
      $id = $_POST['id']; 
      $data = $this->managelayoutmodel->getSections($id);
      echo json_encode($data);
}

3 个答案:

答案 0 :(得分:1)

你应该总是尽量避免使用eval,这是邪恶的!

您有两个选择:

如果响应是字符串:

var res = JSON.parse(response);

或者它是否已经是JSON-Object(例如通过设置ajax调用json的返回类型)

var res = response;

然后您可以按res[0].total_sections访问所有部分。

编辑:您的代码有几个问题:

var之前添加id = document.getElementById('layoutDropdown').value;。旁注:您正在使用jQuery,因此这样更容易访问:$("#layoutDropdown").val();

你遇到了alert(response)吗?如果没有,你的ajax调用不成功。您应该添加error阻止来捕获错误:http://api.jquery.com/jQuery.ajax/

执行console.log(响应)并检查结果。它是否具有您希望它具有的正确值? (你也可以检查ajax调用的主体)。

最有可能的是,eval(response)和访问res[0].total_sections都不是您遇到问题的部分。

答案 1 :(得分:0)

尝试在较新的浏览器中使用JSON.parse(response)。对于旧版浏览器,请使用json2.jsJSON.parse(response)

答案 2 :(得分:0)

如果responsestring,你可以使用var res = eval(response);解析json(但不是很好),var res = JSON.parse(response);或者使用jQuery var res = $.parseJSON(response) }。否则,如果它已经是object,您不需要解析它,只需设置var res = response; 现在,您可以致电res[0].total_sections来获取所有部分,例如您可以使用alert(res[0].total_sections);进行测试。