错误:语法错误,无法识别的表达式:#sub_account1选项[value = HD& NO]

时间:2016-12-07 20:03:36

标签: javascript jquery

我有一个PHP脚本,用于查询数据库并将json_encoded数据返回到javascript / jquery文件,该文件将返回的数据处理为下拉选择框中的动态选项。

这一直很好。最近在我们的数据库中的字段中添加了&符号:ereqs.sub_account_code - > '&HD功放; NO'导致在加载页面时通过FireBug查看语法错误。当下面的查询返回此值时,jquery / js错误会中断响应,并且没有值会添加到选择框中的选项中。

  

错误:语法错误,无法识别的表达式:#sub_account1选项[value = HD& NO]

javascript文件:(json call)

function get_sub_account_codes(instance, code){
  // json call to get sub-account-codes.
  $.getJSON("get-sub-account-codes.html",{code:code}, function(data){
     // empty html drop-down of options that may be showing
     $('#sub_account' + instance).html(''); // .empty()
     $('#sub_account' + instance).val('');
     // build the drop-down options
     $.each(data, function(key, value){
        $("#sub_account" + instance).append("<option value=\""+value.SUB_ACCOUNT_CODE+"\">"+value.SUB_ACCOUNT_CODE+"-"+value.SUB_ACCOUNT_NAME+"</option>");         
     });
  });
}

get-sub-account-codes.html用于获取数据的PHP代码。从js文件调用

$data = array();
$dbh = SHA_DB::getConnection('webadmin');
$sql = "select distinct sub_account_code, sub_account_name
      from ereqs.kuali_account_codes 
      where account_code = upper(?) and
            sub_account_code is not null
      order by sub_account_code";
$results = $dbh->queryChecked($sql, array($code));
while($d = $results->fetchRow(DB_FETCHMODE_ASSOC))
{
    $data[] = $d;
}
# return json encoded string.
print json_encode($data);

去除&符号&amp;&#39;不是一个可行的选择。

有没有办法检查&amp;在PHP文件中以及在json_encode($data)中发回之前以某种方式将其转义?或者应该在javascript代码中检查和更改?

感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

要防止出现错误,您需要将属性选择器的值包装在引号中:

$('#sub_account1 option[value="HD&NO"]');

或者您需要使用&转义特殊字符,在本例中为\\

$('#sub_account1 option[value=HD\\&NO]');