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

how to pass a javascript associative array to php file using getJSON

本文关键字:php 文件 数组 关联 何使用 getJSON javascript      更新时间:2023-09-26

你好,我正在开发一个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上打印出每个数组元素,所以这个方法对我来说是

感谢

的建议

您在这里所做的是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 . ');';

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

信息应该是一个对象,而不是数组

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 
?>

您需要更改一些内容:

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)
});