自动完成错误,null不是对象,仅限IE

时间:2010-08-16 14:05:04

标签: jquery autocomplete

以下代码在Chrome / FireFox中运行良好,但在IE中出错。错误显示消息。

  

消息:'name'为null或不是   对象

我知道有很多相关的问题。但它们似乎在某些方面有所不同。所以,请帮忙。谢谢。 (错误发生在第7行)

    $("#keywords").autocomplete('downloads/get_keywords', {
        multiple: true,
        parse: function(data) {
            return $.map(eval(data), function(row) {
                return {
                    data: row,
                    value: row.name, // error in here.
                    result: row.name
                };
            });
        },
        formatItem: function(item) {
            return format(item);
        }
    });

2 个答案:

答案 0 :(得分:1)

这已经修复了好几个月了。很抱歉这么晚回答。小心jQuery的自动完成,数组的数据源应该是干净的,没有额外的逗号,这很容易被忽视。在我的问题中,“downloads / get_keywords”是一个自定义PHP函数,它返回自动完成下拉框中列出的数组。但是如果你使用foreach来收集你的数组,你可能不关心数组末尾的额外逗号。但IE(仅)讨厌额外的逗号。要解决这个问题,只需删除它就可以解决问题。

  

$ return_data =“”;

     

foreach($ items as $ key => $ value){

     

if(strpos(strtolower($ key),$ q)!== false){

  $return_data .= "{ name: \"$key\", to: \"$value\" }, ";
     

}

     

}

     

$ return_data =   substr_replace($ return_data,'', - 2);   // IE讨厌额外的逗号

     回声'['。 $ return_data。 ']';

答案 1 :(得分:1)

尝试使用这些功能:

function json_encode_string($in_str)
{
  mb_internal_encoding("UTF-8");
  $convmap = array(0x80, 0xFFFF, 0, 0xFFFF);
  $str = "";
  for($i=mb_strlen($in_str)-1; $i>=0; $i--)
  {
    $mb_char = mb_substr($in_str, $i, 1);
    if(mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match))
    {
      $str = sprintf("\\u%04x", $match[1]) . $str;
    }
    else
    {
      $str = $mb_char . $str;
    }
  }
  return $str;
}

function php_json_encode($arr)
{
  $json_str = "";
  if(is_array($arr))
  {
    $pure_array = true;
    $array_length = count($arr);
    for($i=0;$i<$array_length;$i++)
    {
      if(! isset($arr[$i]))
      {
        $pure_array = false;
        break;
      }
    }
    if($pure_array)
    {
      $json_str ="[";
      $temp = array();
      for($i=0;$i<$array_length;$i++)       
      {
        $temp[] = sprintf("%s", php_json_encode($arr[$i]));
      }
      $json_str .= implode(",",$temp);
      $json_str .="]";
    }
    else
    {
      $json_str ="{";
      $temp = array();
      foreach($arr as $key => $value)
      {
        $temp[] = sprintf("\"%s\":%s", $key, php_json_encode($value));
      }
      $json_str .= implode(",",$temp);
      $json_str .="}";
    }
  }
  else
  {
    if(is_string($arr))
    {
      $json_str = "\"". json_encode_string($arr) . "\"";
    }
    else if(is_numeric($arr))
    {
      $json_str = $arr;
    }
    else
    {
      $json_str = "\"". json_encode_string($arr) . "\"";
    }
  }
  return $json_str;
}

代码:

echo php_json_encode($MyObject);
// The var "$MyObject" is what you want to encode as json
// If you're using PHP >= 5.20, you'll have this function implemented as "json_encode"