JSON字符串在服务器端表现得很有趣

时间:2013-01-08 03:50:17

标签: php javascript ajax json

我试图解决我遇到的问题,几乎是在沮丧地拉扯我的头发。 我正在尝试使用javascript将一些数据发送到PHP服务器,同时使用JSON。 根据我的经验,一旦字符串命中PHP服务器并使用json_decode PHP命令将字符串解码回其json格式,它就会失败。它失败了,因为我无法获得关联数组的大小json_decode意味着返回。 有趣的是,如果我宁愿将字符串保存到我的数据库中的blob类型的列,然后再尝试重复使用json_decode的过程并利用它返回的关联数组,我得到了积极的结果。

请看一下所涉及的一些代码。

Javascript代码

var products = {
        product: [],
        companyId: ""
    };

products.companyId = nameofCompany;

for(var c=0; c<count; c++)
{
    var product = {
        productItems: []
    };
    productTitle=document.getElementById('productTitle' + c).innerHTML;
    product.productItems.push({ "productTitle" : productTitle});
    products.product.push({ "product" : product});
}

var JSONObject = new Object;
    JSONObject = products;
    JSONstring = JSON.stringify(JSONObject);
    addNewProduct(JSONstring, 'addNewProduct')

//make ajax calls to PHP server here. I have shorted it to show that I am passing the string

function addNewProduct(inputStr, fieldStr)
{

    inputValue = encodeURIComponent(inputValue);
    fieldID = encodeURIComponent(fieldID);
    cache.push("inputStr=" + inputStr + "&fieldStr=" + fieldStr);
    if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0)
    {
        xmlHttp.open("POST", phpServerAddress, true);
    }
 }

PHP代码

以下代码无法正常工作,因为它为sizeof()命令返回值0。但是,如果我保存 $ _POST ['inputStr']到blob类型的数据库列,然后尝试读取并执行相同的代码,它的工作原理 非常好

if(isset($_POST['inputStr']))
{

    $jsonStrArr= (json_decode($_POST['inputStr'], true));
    die sizeof($jsonStrArr);
}

非常感谢

2 个答案:

答案 0 :(得分:0)

您的代码不完整,我认为这是因为它非常大并且可能分布在多个文件中。如前所述:encodeURIComponent(inputValue)应该是inputStr。

这是一个有用的php页面,也许你可以使用它来添加代码并追踪出错的地方。

<?php
if(isset($_POST["object"])){
    var_dump($_POST);
    var_dump($_GET);
    var_dump($_POST["object"]);
    var_dump(json_decode($_POST["object"]));
}
?>
<!DOCTYPE html>
<html>
<head>
    <script>
        var myObj={value1:"value1",value2:"value2"};
        var someOtherVal="hello there";
        var postString="object=" + escape(JSON.stringify(myObj))
            +"&someOtherval="+escape(someOtherVal);
        var xhr = new XMLHttpRequest();
    xhr.open("POST", "index.php" ,true);
        xhr.setRequestHeader("Content-type",
            "application/x-www-form-urlencoded");
        xhr.onreadystatechange=function(){
            if(this.readyState != 4){
        return;
            }
            if (this.status === 200 || this.status == 304) {
                document.getElementById("output")
                    .innerHTML=this.responseText;
            }
        };
        xhr.send(postString);
    </script>
</head>
<body>
<div id="output"></div>
</body>
</html>

答案 1 :(得分:0)

全部, 感谢您的答复。但是我终于能够解决问题了。通过将JSON.stringify值写入文件来解决它,我注意到该值中包含转义字符。在PHP服务器上使用stripslashes只是帮了忙。同样的感谢