【问题标题】:Jquery - Uncaught TypeError: Cannot use 'in' operator to search for '324' inJquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”
【发布时间】:2013-09-01 08:45:23
【问题描述】:

我正在尝试通过 ajax 发送 Get 请求并输出服务器以 html 格式返回的 json 数据。

但是,我收到了这个错误。

Uncaught TypeError: Cannot use 'in' operator to search for '324' in 
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

这是我通过 ajax 向 php 文件发送 Get 请求的代码。 当我使用 $.each 方法时,它得到了我在上面显示的错误。

parentCat.on('change', function(e){
    parentCatId = $(this).val();

    $.get(
        'index.php?r=admin/post/ajax',
        {"parentCatId":parentCatId},
        function(data){                     
            $.each(data, function(key, value){
                console.log(key + ":" + value)
            })
        }
    )

})

这是我的 PHP 代码,它以 json 格式返回查询结果。

public function actionAjax(){

    $parentCatId=$_GET['parentCatId'];

        $catData = Category::getTargetCategoryData($parentCatId);

        echo CJSON::encode($catData);
        Yii::app()->end();

}

这个php输出的json数据是这样的。

[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

有人知道如何解决这个问题吗?

请帮帮我。 在此先感谢:)

【问题讨论】:

  • 那个错误信息是从哪里来的?
  • 能否在each stmt 前添加console.log(data),看看控制台打印了什么
  • 谢谢!我的问题现在解决了:)
  • 这可能对某人有所帮助 - 登陆这里,但我的问题是使用 $.each('selector')... 而不是 $('selector').each(...

标签: php javascript jquery ajax yii


【解决方案1】:

你有一个 JSON 字符串,而不是一个对象。告诉 jQuery 你期待一个 JSON 响应,它会为你解析它。要么使用$.getJSON 而不是$.get,要么将dataType 参数传递给$.get

$.get(
    'index.php?r=admin/post/ajax',
    {"parentCatId":parentCatId},
    function(data){                     
        $.each(data, function(key, value){
            console.log(key + ":" + value)
        })
    },
    'json'
);

【讨论】:

  • 对于任何从谷歌来到这里寻找这个问题的人,$.post,将相同的第三个参数添加到 $.post 也可以
【解决方案2】:

您还可以使用$.parseJSON(data) 将来自 PHP 脚本的字符串显式转换为真正的 JSON 数组。

【讨论】:

    【解决方案3】:

    如果您要获取 JSON,请使用 $.getJSON(),以便它自动将 JSON 转换为 JS 对象。

    【讨论】:

      【解决方案4】:

      我通过像这样添加 json 数据类型修复了一个类似的错误:

      $.ajax({
          type: "POST",
          url: "someUrl",
          dataType: "json",
          data: {
              varname1 : "varvalue1",
              varname2 : "varvalue2"
          },
          success: function (data) {
              $.each(data, function (varname, varvalue){
                  ...
              });  
          }
      });
      

      在我的控制器中,我必须在任何字符串周围使用双引号(注意:它们必须在 java 中转义):

      @RequestMapping(value = "/someUrl", method=RequestMethod.POST)
      @ResponseBody
      public String getJsonData(@RequestBody String parameters) {
          // parameters = varname1=varvalue1&varname2=varvalue2
          String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
          return exampleData;
      }
      

      因此,如果将数字用作字符串,您可以尝试在数字周围使用双引号(并删除最后一个逗号):

      [{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
      

      【讨论】:

        【解决方案5】:

        使用getJSON

        $.getJSON(
        'index.php?r=admin/post/ajax',
        {"parentCatId":parentCatId},
        function(data){                     
            $.each(data, function(key, value){
                console.log(key + ":" + value)
            })
        });
        

        详细看这里http://api.jquery.com/jQuery.getJSON/

        【讨论】:

          【解决方案6】:

          在我的例子中,我忘记告诉类型控制器响应是一个 JSON 对象。 response.setContentType("application/json");

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-08-22
            • 2014-07-25
            • 1970-01-01
            • 1970-01-01
            • 2013-06-15
            • 2014-07-15
            • 2014-07-03
            相关资源
            最近更新 更多