以下代码在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);
}
});
答案 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"