@解決済み
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 関数を作成する必要がありますか?!