2

@解決済み

James M. Lay が説明したように、content-type を からapplication/x-www-form-urlencodedに変更する必要があります。application/json

UrlEnconded タイプのみがサーバー側で POST 配列を生成するように見えるため (少なくとも PHP では)、エラーが発生しました。そのため、サーバースクリプトでリクエストを受信/処理する方法を変更する必要がありました

$json = file_get_contents('php://input'); //yes. php://input

if($json) $params = json_decode($json,true);
else $params = $_POST;

また、コンテンツ タイプをチェックして別の文字列を生成するために、Javascript コードをいくつか変更する必要がありました。それがJSONの場合、私はただ使用しますJSON.stringify

//string to use in the 'send' method
this.getParametersString = function(){
        if(this.contentType == 'application/json'){
            return JSON.stringify(this.parameters);
        }else{}
}

質問があります

パラメータを受け取ってパラメータのリストを書き込み、POST で送信する関数を作成しています

問題は、特殊文字を送信できないことです。+

そこで、関数encodeURIComponentを使用してそれらを URI に適した文字列にエンコードしようとしました。

別の問題があります。受け取ったパラメーターがオブジェクトの場合、属性をループして、それが別のオブジェクトか文字列かを確認し、オブジェクトの場合は再度ループし、そうでない場合はエンコードします。

しかし、エンコードされた文字列のオブジェクトを返しています。オブジェクトを送信するには、オブジェクトを文字列にする必要があり、そのために を使用しますJSON.stringify。エンコードされた文字列をデコードします。そう%2Bなり+、POST経由でサーバーに送信されません。

一方、stringify最初に使用するとencodeURIComponent、エンコードされるべきではない " や { } などの記号が生成され、文字列は適切に記述された JSON ではありません

どうやってそれをしますか?それはjQueryを使わない方法ですか?独自の stringify 関数を作成する必要がありますか?!

4

1 に答える 1

8

以下を使用していますが、問題はありません

encodeURIComponent(JSON.stringify(object_to_be_serialised))
于 2014-08-23T21:45:26.507 に答える