0

您好,我正在研究 phonegap 应用程序,并在互联网上找到了一种将数据传递到 php 文件的方法,$.getJSON()这种方法是我在 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 上的每个数组元素,所以这个方法对我有用

感谢您的建议

4

3 回答 3

0

你在这里做的是 jsonp (JSON with padding) ...为你的 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 . ');';
于 2013-07-10T07:11:52.617 回答
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 
?>
于 2013-07-10T07:46:50.257 回答
0

你需要改变一些事情:

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

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

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

当你开火时,alert(respuestaServer.validacion)你将拥有 [object Object]。更好地访问 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)
});
于 2013-07-10T08:23:42.463 回答