4

私はこのデータ構造を持っています:

var formValues = {
        TemporaryToken: a.userStatus.get("TemporaryToken"),
        MemorableWordPositionAndValues:[
            {
                Position: a.userStatus.get("MemorableWordPositions")[0],
                Value: this.$('[name="login-memorable-character-1"]').val()
            },
            {
                Position: a.userStatus.get("MemorableWordPositions")[1],
                Value: this.$('[name="login-memorable-character-2"]').val()
            },
            {
                Position: a.userStatus.get("MemorableWordPositions")[2],
                Value: this.$('[name="login-memorable-character-3"]').val()
            }
        ]
    }

そして、私が$ .ajaxでそれを送信すると、次のようになります。

$.ajax({
        url:url,
        type:'PUT',
        //dataType:"json",
        data: JSON.stringify(formValues),
        success:function (data) {

        }
    });

リクエストを送信します。しかし、私がそのようにそれを送るならば:

$.ajax({
        url:url,
        type:'PUT',
        dataType:"json",
        data: formValues,
        success:function (data) {

        }
    });

400の不正なリクエストを受け取りました。これはサーバーの問題ですか、それともJSON.stringifyはdataTypeを「json」に設定するのとは異なることをしていますか?

4

3 に答える 3

3

2回目の試行でもまだリクエストを送信しています。サーバーがリクエストを理解していないだけです。これは、jQueryがformValuesデータを送信する前にデータをクエリ文字列に自動的に処理するためです。ドキュメントを参照してください:

データ

タイプ:オブジェクト、文字列

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GETリクエストのURLに追加されます。この自動処理を防ぐには、processDataオプションを参照してください。オブジェクトはキー/値のペアである必要があります。値が配列の場合、jQueryは、従来の設定(以下で説明)の値に基づいて、同じキーで複数の値をシリアル化します。

したがって、JSON.stringify()JSONを使用するか、使用しない必要があります。falseに設定すると、文字列がサーバーにprocessData送信されるだけなので、役に立たないことに注意してください。この質問[object Object]も参照してください。

于 2013-01-10T16:44:32.330 に答える
3

サーバーは、フォーム パラメータではなく、JSON 文字列を予期しています。JSON.stringifyフォーム パラメータ オブジェクト/配列を JSON 文字列に変換します。これは、サーバーが期待しているように見えます。

于 2013-01-10T16:31:31.263 に答える
0

どう$.param()ですか?

var my_data = {};
my_data.post_name = 'post_value';
$.ajax({
    url:'/post_url.php'
    data:$.param(my_data);
    ...
});
于 2016-09-04T15:43:49.067 に答える