-1

ときどき人が json を次のようにサーバーに送信するのを目にします。

$.ajax({
url: ...
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { 'page': '100AAAAAf00' },
responseType: "json",
success: ...,
error: ...
});

Jsonで{ 'page': '100AAAAAf00' }はありません。

contentType は json だと言っていた...

Json はテキスト表現です。

例:"{ 'page': '100AAAAAf00' }"

ここで何か不足していますか?(jQuery は舞台裏で翻訳を行っているのでしょうか?)

ウィキ :

JSON または JavaScript Object Notation は、人間が読めるデータ交換用に設計されたテキストベース (!!) のオープン スタンダードです。

4

3 に答える 3

3
$.ajax("/", {

    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: {
        'page': '100AAAAAf00'
    },
    type: 'POST',
    responseType: "json"

});

間違っています。application/x-www-form-urlencodedこれにより、リクエスト本文を含む通常のリクエストが送信されます。

page=100AAAAAf00

しかし、ヘッダーは"application/json; charset=utf-8"であるため、実際にはサーバーにをついています。

jQueryを使用して、実際の、純粋な、実際のJSONをサーバーに送信するには、次を使用します。

$.ajax("/", {

    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: JSON.stringify({ //If data is string, jQuery will not try to process it
        'page': '100AAAAAf00'
    }),
    type: 'POST',
    responseType: "json"

});

リクエストの本文は次のようになります。

{"page":"100AAAAAf00"}

$_POSTそして、それは に基づいて動作するため、php ではまったく使用できませんapplication/x-www-form-urlencoded。おそらくそれが、人々が前者を好む理由です。

開発者ツールの Chrome のネットワーク タブを使用して、ここで私の主張を確認できます。

http://jsfiddle.net/sV5m4/1/ - json ヘッダー付きの実際の json

ここに画像の説明を入力

そしてここ:

http://jsfiddle.net/sV5m4/2/ - json であると主張するヘッダーで x-www-form-urlencoded

ここに画像の説明を入力

于 2012-07-30T15:30:22.453 に答える
1

オブジェクトを JSON 文字列に変換する簡単な関数があります...

JSON.stringify({ 'page': '100AAAAAf00' }) // => '{ "page": "100AAAAAf00" }'

逆に...

JSON.parse('{ "page": "100AAAAAf00" }') // => { page: '100AAAAAf00' }
于 2012-07-30T10:06:18.883 に答える
1

あなたの例ではすべてが正しく、dataプロパティはオブジェクトです。

jQuery.ajax (); によるものです。docs dataプロパティは、オブジェクト、配列、または文字列にすることができます。

配列またはオブジェクトの場合、jQuery はそれをシリアル化します。

于 2012-07-30T10:07:28.077 に答える