【问题标题】:Javascript post of json string: nothing passes in or backjson字符串的Javascript帖子:没有传入或传回
【发布时间】:2015-04-01 19:55:33
【问题描述】:

我正在处理一个从 html 表(两列加上一个表单的索引)获取数据并创建一个 json 字符串的页面。这应该传递给 php,然后我对数据进行一些计算,然后将其发送回页面以在表中附加新的列值。

这是我目前得到的:

数据数组

这是其中一个数组的样子(LatData):

[1, 1, "43.07104167", "43.07178767", "43.0707977", "43.07115595", "43.06975769", "43.07023291", "43.07269194", "43.07112776", "43.07067623", "43.07285063", "43.07132924", "43.07091389", "43.07218128", "43.07279775", "43.07440354", "43.07560161", "43.07471769", "43.07073611", "43.07067713", "43.070925", "43.07148333", "43.07070833", "43.07046389", "43.07024444", "43.07127778"]

将数组和 int 转换为 JSON 字符串

所以我采用两个数组,如上面的一个相同长度的数组,而 Item 只是一个单值整数,我制作了我的 json 字符串:

json = JSON.stringify({"Item":Item, "Lat": LatData, "Lon": LongData}); 

然后我得到一个不错的json字符串如下:

{"Item":1,"Lat":[1,1,"43.07104167","43.07178767","43.0707977","43.07115595","43.06975769","43.07023291","43.07269194","43.07112776","43.07067623","43.07285063","43.07132924","43.07091389","43.07218128","43.07279775","43.07440354","43.07560161","43.07471769","43.07073611","43.07067713","43.070925","43.07148333","43.07070833","43.07046389","43.07024444","43.07127778"],"Lon":[1,1,"-99.325375","-99.32837458","-99.32465527","-99.325341","-99.32509187","-99.32417542","-99.32573126","-99.32726626","-99.32830531","-99.32749062","-99.32966364","-99.32493056","-99.33109478","-99.33023795","-99.32853197","-99.32776487","-99.32631851","-99.3253","-99.32540699","-99.32571944","-99.32540278","-99.32453889","-99.32566667","-99.32622222","-99.32622222"]}

将 JSON 字符串发送到 PHP

这是我发布数据的方式:

function MakePhpCall()
{

var json ="";  //this is the JSON string of all the data
var Item=1;    //holding this constant for now

json = JSON.stringify({"Item":Item, "Lat": LatData, "Lon": LongData});  //make JSON string to pass into PHP

if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("response").innerHTML = xmlhttp.responseText;
        }
    }
   xmlhttp.open("GET","Conversion_JQ.php?json=" + json, true);      

    xmlhttp.send();
}

PHP 处理程序

然后在 PHP 端我这样做:

$positions = json_decode($json);
echo $positions->Item[0];
echo $positions->Lat[2];
echo $positions->Lon[2];

我没有收到任何错误,但我也没有在 html 页面中收到任何对我的 div 的回调。

目标

最终我想将 JSON 解码为 PHP 数组,这将帮助我更轻松地进行计算。

有人可以帮我吗?

【问题讨论】:

  • PHP 中的 $json 字符串是否等于 JavaScript 中的 json var?你确定 PHP 是由 JavaScript 调用的吗(你可以在 PHP 端用 die('Hello World'); 试试
  • 您可以尝试var_dump($positions) 并告诉您返回的内容吗?
  • 你看过浏览器控制台中的请求/响应吗?
  • 通过 GET 在 URL 中发送的数据可能太多了,您可能需要使用 POST 并将其发送到正文中。但即使使用 GET 是一个选项,您也需要使用 encodeUriComponent(json) 才能成功传递它。
  • 为什么xmlhtto.open 被评论了?那么json在哪里传递给php?

标签: javascript php jquery html json


【解决方案1】:

使用常规方法无法传入字符串

xmlhttp.open("GET","Conversion_JQ.php?json=" + json, true);      

但是,像这样对变量进行编码:

var uri = encodeRUIComponent(json);
xmlhttp.open("GET","Conversion_JQ.php?json=" + uri, true);  

允许变量传入。它最终有斜线所以我不得不使用

stripslashes($json);

在 PHP 端清理字符串。

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多