此代码不适用于最新的jQuery

时间:2012-02-09 21:33:37

标签: php jquery

我正在使用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,以防万一这是一个在页面上尖叫的问题

1 个答案:

答案 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")
    )
);