如何使用getJSON将javascript关联数组传递给php文件

时间:2013-07-10 06:58:44

标签: php javascript jquery arrays json

您好我正在开发一个phonegap应用程序,并在互联网上找到一种使用$.getJSON()将数据传递到php文件的方法,就是我在javascript上有一个词典

var info =[];
 if(document.getElementById(temp).checked){
          info[temp]="0";
        }
        else{
          info[temp]="1";
        } 
      }

因此,一旦创建了字典,我想将其发送到外部php文件。

var archivoValidacion = "http://mysite.com/prueba.php?jsoncallback=?";
    $.getJSON( archivoValidacion, {id_array:JSON.stringify(info)})
    .done(function(respuestaServer){
      alert(respuestaServer.validacion)});

这是我得到的PHP

<?php
$resultados = array();
$id_array = $_GET['id_array'];
$resultados["validacion"] = $id_array;
$resultadosJson = json_encode($resultados);


echo $_GET['jsoncallback'] . '(' . $resultadosJson . ');';

?>

问题是,当弹出窗口[]

时,我会得到一个空括号

当我有一个普通的数组并发送它时,我可以打印出php上的每一个数组元素,所以这个方法适合我

感谢您的建议

3 个答案:

答案 0 :(得分:0)

你在这里做的是jsonp(带填充的JSON)...试试你的js文件

var archivoValidacion = "http://mysite.com/prueba.php";
$.ajax({
    dataType:"jsonp",
    url:archivoValidacion,
    "data": {id_array:JSON.stringify(info)},
    "success": function(respuestaServer){
        alert(respuestaServer.validacion)
 }});

也在php方面你必须改变

echo $_GET['jsoncallback'] . '(' . $resultadosJson . ');';

echo $_GET['callback'] . '(' . $resultadosJson . ');';

答案 1 :(得分:0)

我不知道你在回调你做了什么,但我认为你应该这样试试:

info应该是一个对象而不是一个数组

var info ={};
if(document.getElementById(temp).checked){
     info[temp]="0";
} else{
     info[temp]="1";
} 

你不需要JSON.stringify

var url= "http://mysite.com/prueba.php";
$.getJSON( url, {"id_array":info})
.done(function(data){
    alert(data.validacion);
});

如果你用getJSON调用prueba.php然后你应该返回一个json字符串,回调是.done()中定义的函数:

<?php
$r = array();
// print_r($_GET); exit; // Maybe do a print_r and stop here to see what you got in firebug
$id_array = $_GET['id_array'];
$r["validacion"] = $id_array;
echo json_encode($r);   // See what your result look like in firebug console tab 
?>

答案 2 :(得分:0)

你需要改变一些事情:

JSON不支持关联数组,因此您需要将var info = [];更改为var info = {};并指定您需要执行的值info.temp = "0"

不要使用JSON.stringfy,因为你的php脚本的响应是这样的

{"validacion":"{\"temp\":\"0\"}"}

当您解雇alert(respuestaServer.validacion)时,您将拥有[对象]。可以更好地访问json成员:alert(respuestaServer.validacion.temp)

然后,固定代码是

var info ={};
if(document.getElementById(temp).checked){
    info.temp="0";
}
else{
    info.temp="1";
} 

...

var archivoValidacion = "http://mysite.com/prueba.php?jsoncallback=?";
$.getJSON( archivoValidacion, {id_array:info})
.done(function(respuestaServer){
    alert(respuestaServer.validacion.temp)
});