我正在使用http://phpcode.hu/teszt/jquery_select/
中的一些代码看起来我没有添加足够的信息,因此这个问题被投票结果,比celine dion在泰坦尼克号上唱歌更快。
确定下面的php代码(仅供后代使用)此脚本的所有代码都包含在下面,没有更多或更少 - 除了实际的数据库连接,它与bug一起使用它。
步骤:运行这个是jquery 1.2.3代码运行绝对正常。 在构建之后的任何内容,我们在辅助选择字段中获得zilch(城市)
在最新的jQuery构建中运行:在FF 10上使用firebug。
如果我们进行状态选择,则城市选择不会传播。但是,如果我们检查这个元素,我们只能看到这个:
<select id="cities" style="min-width:212px;"> </select>
但如果我们运行firebug,控制台:
Params:ajax是的 国家3 响应: [{optionValue:4,optionDisplay:'Canberra'}] HTML: [{optionValue:4,optionDisplay:'Canberra'}]
问题是它不适用于最新的jquery构建,实际上似乎只能使用 jQuery 1.2.3 - New Wave Javascript
所以这不是一个大问题,因为它使用非常少的js。所以想知道你是否看过这段代码,你能不能看到为什么它不能与最新的jquery构建一起运行时会尖叫什么?
$(function(){
$("select#states").change(function(){
$.getJSON("select.php",{states: $(this).val(), ajax: 'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$("select#cities").html(options);
})
})
})
形式:
<!-- form to change location-->
<select id="states" style="min-width:212px;">
<option value="-1">--Select--</option>
<?php
createoptions("states", "states_id", "states");
?>
</select>
<select id="cities" style="min-width:212px;">
</select>
<!--//end-->
php如果有任何用处(这在select.php上)
<?php
error_reporting(E_ALL);
ini_set("display_errors", 0);
include("conndb.php");
function createoptions($table , $id , $field , $condition_field , $value)
{
$sql = sprintf("select * from $table WHERE $condition_field=%d ORDER BY $field" , $value);
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) > 0) {
while ($a = mysql_fetch_assoc($res))
$out[] = "{optionValue: {$a[$id]}, optionDisplay: '$a[$field]'}";
return "[" . implode("," , $out) . "]";
} else
return "[{optionValue: -1 , optionDisplay: 'No result'}]";
}
if (isset($_GET['states'])) {
echo createoptions("cities" , "cities_id" , "cities" , "states_id" , $_GET['states']);
}
die();
?>
最后用于数据库连接的php:
<?php
include("conndb.php");
function createoptions($table , $id , $field)
{
$sql = "select * from $table ORDER BY $field";
$res = mysql_query($sql) or die(mysql_error());
while ($a = mysql_fetch_assoc($res))
echo "<option value=\"{$a[$id]}\">$a[$field]</option>";
}
?>
我发布了几乎是evertyhing,以防万一这是一个在页面上尖叫的问题
答案 0 :(得分:6)
这是无效的JSON:
[{optionValue: -1 , optionDisplay: 'No result'}]
要使它有效,它应该是:
[{"optionValue": -1 , "optionDisplay": "No result"}]
JSON可能是JavaScript语法的子集,但它是严格子集。它不支持像标识符作为对象键这样的奢侈品。 They must be strings
为了帮助确保有效的JSON,请查看PHP自己的JSON functions对象序列化:
return json_encode(
array(
array("optionValue" => -1, "optionDisplay" => "No result")
)
);