0

在试图解决我遇到的问题时,我几乎感到沮丧。我正在尝试使用 javascript 在使用 JSON 的同时将一些数据发送到 PHP 服务器。根据我的经验,一旦字符串到达​​ 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);
}

非常感谢

4

2 回答 2

0

All, Thanks for your response. However I was able to finally get the issue resolved. Resolved it by writing the JSON.stringify value to a file where I noticed the value had escape characters in it. Using stripslashes on the PHP server simply helped out. All the same thanks

于 2013-01-08T15:16:11.047 回答
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>
于 2013-01-08T04:20:14.997 回答