javascript - 显示未评估键的 JSON POST 请求对象

标签 javascript json ajax django

我正在尝试向 Django 发送 AJAX post 请求。我有一个有效的 JSON 对象,我可以在浏览器中打印/查看/字符串化该对象,但是当它到达 Django 时,键未被评估(请参阅第二个代码块中的 Django View )。

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 View 中:

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 -ing 有效负载,但这没有帮助,我仍然看到相同的格式。使用 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}]}': ['']}>`

为什么会发生这种情况?

我可以看到发送时未正确评估数据:

Form Data

最佳答案

我不完全确定您的意思键未评估,但要在 POST 请求中发送对象,您应该在 ajax 调用中将其字符串化:

data: JSON.stringify(payload),  

然后在您的 View 中,从 request.body 检索 JSON 并使用 json 模块加载它:

import json

...

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

关于javascript - 显示未评估键的 JSON POST 请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115578/

相关文章:

javascript - 如何使用nodejs加载2个json

android - 如何在按钮单击时发送推送通知

mysql - 在 MySQL 中对 JSON 字段进行全文搜索

javascript - 解析 JSON 流

jquery - 如何对下拉框中选定的名称执行操作

javascript - 需要澄清 Zoho crm 中的插入 API 调用

javascript - Breeze.js 到 ODATA Web API - CORS 请求失败

javascript - 将监听器仅应用于具有 ajax 无限滚动的新项目

javascript - React 是否保持状态更新的顺序?

javascript - 如何在显示搜索结果的页面之前显示加载页面?