簡體   English   中英

顯示未評估密鑰的JSON POST請求對象

[英]JSON POST request object showing unevaluated keys

我正在嘗試向Django發送AJAX發布請求。 我有一個有效的JSON對象,可以在瀏覽器中打印/查看/字符串化它,但是當它到達Django中時,鍵是未評估的(請參見第二代碼塊中的Django視圖)。

JS:

/* prettify payload for back */
var makeUpdatePayload = function(fieldType, fieldArray) {
  var orderInfo =  fieldArray.map(function(field, idx) {
    var fieldInfo = field.split('-field-')
    return {
      'pk': fieldInfo[1],
      'order': idx
    }
  });      
  return {[fieldType]: orderInfo}
};

/* post payload */
var updateFieldOrder = function( payload ) {
  console.log('in ajax')
  console.log(JSON.stringify(payload)) // {"search":[{"pk":"9","order":0},{"pk":"7","order":1},{"pk":"6","order":2},{"pk":"8","order":3},{"pk":"5","order":4},{"pk":"4","order":5}]}
  $.ajax({
    type: "POST",
    url: "update_field_order/",
    dataType: "json",
    data: JSON.parse( JSON.stringify(payload)),
  });
};

var payload = makeUpdatePayload('search', ["search-field-9", "search-field-7", "search-field-6", "search-field-8", "search-field-5", "search-field-4"])
updateFieldOrder(payload);

在我的django視圖中:

def update_field_order(request, recipe_pk):
    print('post')
    print(request.POST) # <QueryDict: {'search[0][pk]': ['9'], 'search[0][order]': ['0'], 'search[1][pk]': ['7'], 'search[1][order]': ['1'], 'search[2][pk]': ['6'], 'search[2][order]': ['2'], 'search[3][pk]': ['8'], 'search[3][order]': ['3'], 'search[4][pk]': ['5'], 'search[4][order]': ['4'], 'search[5][pk]': ['4'], 'search[5][order]': ['5']}>

我已經嘗試過JSON.stringify,然后嘗試JSON.parse-在發送之前對有效負載進行設置,但這無濟於事,我仍然看到相同的格式。 使用JSON.stringify(payload) ,我得到了預期的輸出:

`<QueryDict: {'{"search":[{"pk":"9","order":0},{"pk":"7","order":1},{"pk":"6","order":2},{"pk":"8","order":3},{"pk":"5","order":4},{"pk":"4","order":5}]}': ['']}>`

為什么會這樣呢?

我可以看到發送時未正確評估數據:

表格數據

我不完全確定鍵的含義是未評估的 ,但是要在POST請求中發送對象,應在ajax調用中將其字符串化:

data: JSON.stringify(payload),  

然后在您的視圖中,從request.body檢索JSON並使用json模塊加載:

import json

...

payload = json.loads(request.body.decode("utf-8"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM