2016-07-05 1 views
1

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

+0

配列の '.ajax()'関数で、jQueryが好奇心を抱いているようです: > * data:*これはクエリ文字列に変換されます。これはGETリクエストのURLに追加されています。この自動処理を防ぐには、 'processData'オプションを参照してください。オブジェクトはキー/値のペアでなければなりません。 ** valueが配列の場合、jQueryは 'traditional'設定(後述)の値に基づいて同じキー**で複数の値を直列化します。< 誰かがこれを防ぐ方法を知っていますか?私は 'true'属性と' false'属性の両方で 'traditional'属性を使用しようとしましたが、何も変わりませんでした。 – bjorge

答えて

1

、どうもありがとうございました。私は、同じ問題を持つ将来の人々を助けるための答えをここに書き留めます。私は私のコメントで想定通り

  • まず、トラブルがそれに送られたデータを誤って解釈するが、jQueryのからなり、ループバックから来なかった:POSTリクエストが送信されましたが、データなし。
  • その後、適切なPOSTリクエスト(つまり、配列ではなくJSONオブジェクト)を送信することができました。私は2つのContent-Typeヘッダーがあることがわかりました。私は1つだけを送るために私の機能を変えました。

  • は最後に、私は次のコードで正しく実行要求を行うことができました。

    var data = [ 
          {"requestType": 3, "parameter": "stuff"}, 
          {"requestType": 2, "parameter": "otherStuff"} 
         ]; 
    $.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx"), { 
         data: JSON.stringify(data), 
         accept: "application/json", 
         contentType: "application/json", 
         method: "POST" 
        }).done(success) 
        .fail(fail); 
    

    将来誰かに役立つことを願っています。

  • 関連する問題