0

私は次の行を持つphpスクリプトを持っています:

echo json_encode(array('success'=>'true','userid'=>$userid, 'data' => $array));

次を返します。

{
"success": "true",
"userid": "1",
"data": [
    {
        "id": "1",
        "name": "Trigger",
        "image": "",
        "subtitle": "",
        "description": "",
        "range1": null,
        "range2": null,
        "range3": null
    },
    {
        "id": "2",
        "name": "DWS",
        "image": "",
        "subtitle": "",
        "description": "",
        "range1": null,
        "range2": null,
        "range3": null
    }
]

}

しかし、jQuery ajaxを次のように呼び出すと、次のようになります。

$.ajax({
    type: 'POST',
    url: 'url',
    crossDomain: true,
    data: {name: name},
    success: function(success, userid, data) {

      if (success = true) {
         document.write(userid);
         document.write(success);
       }
   }
});

userid「成功」です。実際のsuccessものは動作します、そのtrue

この不正な形式のデータが返されていますか?それとも単に私のコードですか?

よろしくお願いします、ニール

4

2 に答える 2

3

成功のコールバックが取る引数は、ドキュメントで定義されています:

success(data, textStatus, jqXHR)

応答は、引数として渡される前に分割されません。最初の引数から値を抽出する必要があります。

header('Content-Type: application/json')また、最初の引数を入力するときに、jQuery が HTML ではなく JSON として応答を解析するように、PHPに追加する必要があります。

次に、テストdata.successしてアクセスできます(返されたデータのプロパティに割り当てられる配列とdata.userid同様に、混乱を避けるために名前を変更することもできます)。data.datadata

テストするときは、現在使用している*代入*演算子ではなく、===(または)を使用する必要があることに注意してください。また、JSON 応答がboolean ではなく文字列==を返すことにも注意してください。 "true"true

于 2012-10-14T15:32:49.657 に答える
1

に独自の引数を追加することはできませんSuccess。コードを次のように変更します。

success: function(response) {

      if (response.success == true) { 
         document.write(response.userid);
         document.write(response.success);
       }
   }

jQuery Docs for によるとsuccess()

成功(データ、テキストステータス、jqXHR)

リクエストが成功した場合に呼び出される関数。この関数には 3 つの引数が渡されます。dataType パラメータに従ってフォーマットされた、サーバーから返されたデータ。ステータスを説明する文字列。jqXHR (jQuery 1.4.x では XMLHttpRequest) オブジェクト。jQuery 1.5 の時点で、success 設定は関数の配列を受け入れることができます。各関数が順番に呼び出されます。

http://api.jquery.com/jQuery.ajax/

于 2012-10-14T15:35:05.820 に答える