我一定遗漏了什么。我有一个简单的jquery自动完成:
$("input#txtApplicationName").autocomplete({
source: "ApplicationProcess.php",
minLength: 2,
select: function (event, ui) {
alert(ui.item.id);
alert(ui.item.name);
//$('#state_id').val(ui.item.id);
//$('#abbrev').val(ui.item.abbrev);
}
});
以下是ApplicationProcess.php的全部内容:
<?
echo '[{"id":1,"name":"Generate Ideas"},{"id":2,"name":"Define Products"}]';
?>
当我在自动完成字段(txtApplicationName)中键入文本时,我什么也得不到。框下方不会显示任何提示。
为了让你知道我的js和html是好的,如果我用以下内容代替上面的jquery:
$("input#txtApplicationName").autocomplete({
source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
});
它运行良好。
我做错了什么?我的php中的JSON格式错误吗?如果我直接从浏览器中点击php文件,它会像预期的那样吐出JSON,没有错误。
我认为主要的问题是您所使用的示例需要一个普通数组。
您已经创建了一个多维数组作为响应。
例如,在php脚本中尝试以下操作:
$values = array( 'Generate Ideas', 'Define Products' );
echo json_encode( $values );
编辑:如果您需要一个多维数组,则必须定义一个id=>值对。
$values = array(
array( 'id' => 0, 'label' => 'Generate Ideas' ),
array( 'id'=> 1, 'label' => 'Define Products' ),
);
echo json_encode( $values );
并符合JavaScript代码:
jQuery().ready( function () {
jQuery( '#txtApplicationName' ).autocomplete( {
minLength:2,
source:function ( request, response ) {
jQuery.ajax( {
url:'ApplicationProcess.php',
dataType:"json",
success:function ( data ) {
response( data );
}
} );
}
} );
} );
可能是您的JSON无效。我不确定您是否必须将"char"作为参数的名称:
[{id:1,name:"Generate Ideas"},{id:2,name:"Define Products"}]
我的意思是,我真的认为这没有必要。编辑:是的,你不必,删除它们
问题原来是JSON中的"name"。当我把"name"改成任何其他单词时,一切都正常。
这很好:echo'[{"id":1,"value":"Generate Ideas"},{"id":2,"value":"Define Products"}]';
我想知道有多少人意识到这一怪事。这是jquery中的一个错误吗?
事实证明,我的网页中有一个冲突的.js引用导致了这个问题。对不起大家。