0

jQuery1.8とKohanaを使用した単純なjQueryajax呼び出しと応答:

$.ajax({
    data:{
        file: file  
},
    dataType: 'json',
    url: 'media/delete',
    contentType: 'application/json; charset=utf-8',
    type: 'GET',
    complete: function(response){
        console.log(response);
        console.log(response.file);
    }
});

URLのPHPは、次を返す単純なjson_encode()ページです。

{"file":"uploaded\/img\/Screen Shot 2012-04-21 at 2.17.06 PM-610.png"}

JSLintによるとこれは有効なJSONです。

firebugによると、応答ヘッダーは次のとおりです。

Response Headers
Connection  Keep-Alive
Content-Length  74
Content-Type    application/json
Date    Sun, 12 Aug 2012 17:44:39 GMT
Keep-Alive  timeout=5, max=97
Server  Apache/2.4.1 (Unix) PHP/5.4.0
X-Powered-By    PHP/5.4.0

しかし、成功関数では、「応答」は私が期待しているJSオブジェクトではないため、response.fileにアクセスできません。代わりに、readyState、responseText、statusなどのフィールドを持つある種の応答オブジェクトのようです。

ここにはこれに似た質問がたくさんありますが、他の回答によれば、すべてが正しく配線されていると思います。

ここで何が欠けていますか?

4

1 に答える 1

0

コールバックは、complete:引数として応答を提供しません。jQueryドキュメント$.ajax()から:

complete(jqXHR, textStatus)

したがって、完全な関数の引数として表示されているのは、解析された応答ではなく、jqXHRオブジェクトです。これは、成功したかどうかに関係なく、ajax呼び出しが実行されたときにcompleteが呼び出されるためと考えられます。正常に解析されたJSON応答を取得するのはsuccessハンドラーです。

success:代わりにコールバックを使用することをお勧めします。

$.ajax({
    data: {file: file},
    dataType: 'json',
    url: 'media/delete',
    contentType: 'application/json; charset=utf-8',
    type: 'GET',
    success: function(response){
        console.log(response);
        console.log(response.file);
    }
});
于 2012-08-12T21:12:54.307 に答える