Ошибка автозаполнения, ноль не является объектом, только IE - PullRequest
1 голос
/ 16 августа 2010

следующий код хорошо работает в Chrome / FireFox, но ошибка в IE. Ошибка показывает сообщение.

Сообщение: имя не указано или не указано объект

Я знаю, что есть довольно много вопросов, связанных. Но они кажутся разными в некотором роде. Так что, пожалуйста, помогите. Благодарю. (Ошибка произошла в строке 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 ]

1 голос
/ 04 ноября 2010

Попробуйте использовать следующие функции:

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"
1 голос
/ 07 октября 2010

Это было исправлено в течение нескольких месяцев. Извините за ответ так поздно. Будьте осторожны с автозаполнением jQuery, источник данных массива должен быть чистым без лишних запятых, которые легко пропустить. В моем вопросе "downloads / get_keywords" - это пользовательская функция PHP, которая возвращает массив, указанный в раскрывающемся списке автозаполнения. Но если вы используете foreach для сбора вашего массива, вам, вероятно, не нужно лишняя запятая в конце массива. Но IE (только) ненавидит лишнюю запятую. Чтобы решить эту проблему, просто удалите ее, чем проблема решена.

$ return_data = "";

foreach ($ items как $ key => $ value) {

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

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

}

}

$ return_data = substr_replace ($ return_data, '', -2); // IE ненавидит лишнюю запятую

эхо '['. $ return_data. ']';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...