これが私のコードです:
$.ajax({
url: "/api/invoice/" + newInvoice._id,
type: 'PUT',
data: JSON.stringify(newInvoice),
dataType: 'json',
contentType: "application/json; charset=utf-8"
})
.success(function () {
$('#statusLine').text('Successfully submitted invoice {0}. Click here to dismiss.'.format(newInvoice._id));
})
.error(function (err) {
alert(err);
});
リクエスト:
PUT http://localhost:8000/api/invoice/16211 HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 770
Origin: http://localhost:8000
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:8000/invoice.html?id=16211
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"items":[{"id":...
リクエストの本文は実際には有効なjsonです。簡潔にするために、リクエストの本文を切り捨てました。
応答:
HTTP/1.1 409 Conflict
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 1386
ETag: 250542419
Connection: keep-alive
{
"msg": "Cannot update the invoice #16211, because it has already been updated by someone else.",
"invoice": {
"items": [
{...
繰り返しますが、応答は完全に有効なjsonであり、簡潔にするために切り捨てられています。
予想どおり、error
ハンドラーはerr
オブジェクトとともに呼び出されます。ただし、解析されたjsonを取得するにはどうすればよいですか?もちろん、応答のコンテンツタイプがjsonであることを確認してから、err.responseText
自分自身を解析することもできますが、jQueryajaxが私のために行うことになっているのではないでしょうか。$.get
つまり、サーバーからオブジェクトを取得するときのクエリに対してそうします。
私は何が欠けていますか?
編集
これはhttps://stackoverflow.com/a/12310751/80002の修正です:
リクエストの実行:
var ajax = $.ajax(...
エラー応答の処理:
var res, ct = ajax.getResponseHeader("content-type") || '';
if (ct.indexOf('json') > -1) {
res = $.parseJSON(err.responseText);
// process the response here
}