Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在选择选项中使用JSON数组_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

Javascript 在选择选项中使用JSON数组

Javascript 在选择选项中使用JSON数组,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我有一个选择框,其中的选项遵循以下格式: <select id="acctg_dept" name="acctg_dept"> <option value="{'acctg_dept_nbr':'2','acctg_dept_desc':'ELECTRONICS'}">02 - ELECTRONICS</option> ... </select> 现在我已经在那里严格化了,但是我没有尝试过,而且仍然有问题 ajax调用一个PHP页

我有一个选择框,其中的选项遵循以下格式:

 <select id="acctg_dept" name="acctg_dept">
    <option value="{'acctg_dept_nbr':'2','acctg_dept_desc':'ELECTRONICS'}">02 - ELECTRONICS</option>
   ...
</select>
现在我已经在那里严格化了,但是我没有尝试过,而且仍然有问题

ajax调用一个PHP页面来执行以下操作:

$acctg_dept=$_请求['acctg_dept']; $acctg_dept=json_decode$acctg_dept,true

同样,我尝试了几种不同的方法,但仍然没有得到我想要的结果,即能够在相同的PHP脚本中执行以下操作

$acctg_dept_nbr=$acctg_dept['acctg_dept_nbr']


使用这里概述的方法,我得到非法的字符串偏移量。我试过foreach和$acctg_dept[0]['acctg_dept_nbr'];我一事无成。我认为PHP不把它看作是一个数组,但我不确定为什么不把它看作数组。

您可以尝试它,但不需要测试

html代码

<select id="acctg_dept" name="acctg_dept">
 <option  value='{"acctg_dept_nbr":"2","acctg_dept_desc":"ELECTRONICS"}'>ELC</option>  
</select>
在服务器端尝试捕获post数据

print "<pre>";
print_r($_POST);
die;

acctg_dept应该已经是一个字符串,您不需要调用JSON.stringify.install firebug并监视ajax调用来查看问题所在,当我这样做时,非法偏移错误消失了,但是$acct_dept_nbr=$acctg_dept['acctg_dept_nbr');赋值似乎仍然不起作用。@LMG没有什么要字符串化的,它不是JavaScript对象或数组,它已经是字符串了。您的字符串是无效的JSON,因此它永远不会起作用。标识符和值应使用双引号而不是单引号引用。避免手动构建JSON。在PHP中,在本机数组或对象上使用json_编码。
var acctg_dept = [];
acctg_dept = $('#acctg_dept').val();
$.ajax({
 type : 'post',        
 url : url,
 data : {acctg_dept: acctg_dept},     //don't stringify it   
  success:function(data){
  console.log(data);
 }
});
print "<pre>";
print_r($_POST);
die;