我试图解决我遇到的问题,几乎是在沮丧地拉扯我的头发。 我正在尝试使用javascript将一些数据发送到PHP服务器,同时使用JSON。 根据我的经验,一旦字符串命中PHP服务器并使用json_decode PHP命令将字符串解码回其json格式,它就会失败。它失败了,因为我无法获得关联数组的大小json_decode意味着返回。 有趣的是,如果我宁愿将字符串保存到我的数据库中的blob类型的列,然后再尝试重复使用json_decode的过程并利用它返回的关联数组,我得到了积极的结果。
请看一下所涉及的一些代码。
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);
}
}
以下代码无法正常工作,因为它为sizeof()命令返回值0。但是,如果我保存 $ _POST ['inputStr']到blob类型的数据库列,然后尝试读取并执行相同的代码,它的工作原理 非常好
if(isset($_POST['inputStr']))
{
$jsonStrArr= (json_decode($_POST['inputStr'], true));
die sizeof($jsonStrArr);
}
非常感谢
答案 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只是帮了忙。同样的感谢