私が抱えている問題を整理しようとしたので、私はほとんど欲求不満で髪を引っ張っています. JSONを利用しながら、JavaScriptを使用して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);
}
どうもありがとう