0

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

どうもありがとう

4

2 に答える 2

0

皆様、ご回答ありがとうございます。しかし、私は最終的に問題を解決することができました。値にエスケープ文字が含まれていることに気付いたファイルに JSON.stringify 値を書き込むことで解決しました。PHP サーバーでストリップスラッシュを使用すると、単純に役に立ちました。すべて同じありがとう

于 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 に答える