ajaxを使用してループバックの問題に苦しんでいます。私はjQuery関数.ajax()
を介してオブジェクトの配列をPOSTしようとするが、私は単純にできない。サーバーは常に私に422エラー(Unprocessable Entity)を送信します。ループバック:POSTでオブジェクトの配列をajaxで返す
奇妙なことです:私はGUIエクスプローラまたはコマンドラインを使用して全く同じ要求を行うことができます。
私は2つのモデルがあります:hadMany/belongsToの関係を通じて関連するニモ& PendingUpdates(私は読みやすくするために、それらを切り捨てました):
// nemo.json
{
"name": "Nemo",
"base": "PersistedModel",
"properties": {
"id": {
"type": "Number",
"id": true,
"required": false,
"generated": true
}
},
"relations": {
"pendingUpdates": {
"type": "hasMany",
"model": "PendingUpdate",
"foreignKey": "nId"
}
}
}
と
// pending-update.json
{
"name": "PendingUpdate",
"base": "PersistedModel",
"properties": {
"id": {
"type": "Number",
"id": true,
"required": false,
"generated": true
},
"nId": {
"type": "Number",
"required": true
},
"parameter": {
"type": "String",
"required": false
},
"requestType": {
"type": "Number",
"required": true
}
},
"relations": {
"nemo": {
"type": "belongsTo",
"model": "Nemo",
"foreignKey": "nId"
}
}
}
は、ここでのことです。私はpendingUpdatesの配列をPOSTしようとします。 strongloopエクスプローラを使用すると、POST
this:on /Nemos/{id}/pendingUpdates
(id:2)とデータ:[{"requestType": 3, "parameter": "stuff"}, {"requestType": 2, "parameter": "otherStuff"}]
です。私は体内に作成されたオブジェクトを持つ200応答コードを持っています。私はjQueryのを使用して、まったく同じ要求クライアント側を送信しようとすると、
はしかし、私は422
を持ってここに抜粋です:
var data = [
{"requestType": 3, "parameter": "stuff"},
{"requestType": 2, "parameter": "otherStuff"}
];
$.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx", {
data: data,
headers: {
Accept: "application/json",
contentType: "application/json"
},
method: "POST"
}).done(success)
.fail(fail);
私が{data}
で、直接data
を使用して試してみました、{"data": data}
、JSON.stringify({"data": data})
、JSON.stringify(data)
...
誰かが私を助けてくれますか?
は[OK]を、コンソールとWireSharkので物事をしようとして一日を過ごした後、私が間違っていたものを見つけた
Bjorge
配列の '.ajax()'関数で、jQueryが好奇心を抱いているようです: > * data:*これはクエリ文字列に変換されます。これはGETリクエストのURLに追加されています。この自動処理を防ぐには、 'processData'オプションを参照してください。オブジェクトはキー/値のペアでなければなりません。 ** valueが配列の場合、jQueryは 'traditional'設定(後述)の値に基づいて同じキー**で複数の値を直列化します。< 誰かがこれを防ぐ方法を知っていますか?私は 'true'属性と' false'属性の両方で 'traditional'属性を使用しようとしましたが、何も変わりませんでした。 – bjorge