簡體   English   中英

通過AJAX jQuery請求發送時,數組被展平

[英]Array is flattened when it's sent through AJAX jQuery request

我使用主體解析器中間件在Express中編寫了以下端點。

app.post("/api/poll/new",api.NewPoll);
api.NewPoll = function(req,res){
    if(!req.body) return res.status(400).send("MISSING BODY");
    console.log(req.body,typeof(req.body));
    if(!req.body.name) return res.status(400).send("MISSING NAME");
    if(!req.body.options) return res.status(400).send("MISSING OPTIONS");
//rest of the endpoint goes here
};

端點期望的數據如下所示:

{
    "name":"Poller",
    "options":[
        {
            "name":"Jojo's Bizarre Adventure",
            "desc":"A great show"
        },
        {
            "name":"Bakemonogatari",
            "desc":"A real good show"
        },
}

當我通過郵遞員發送此數據時,一切正常。 req.body.options存在並且是一個數組。 但是,當我在jQuery AJAX調用中執行完全相同的操作時,結果明顯不同:

var payload = {
                name:"Poller",
                options:g.newPollInfo
//g.newPollInfo contains the same array
            }
        $.ajax({
            method:"POST",
            url:"/api/poll/new",
            data:payload,
            success:function(data){
                console.log(data);
            },
            error:function(req, status, error){
                console.log(req,status,error);
            }
        });

我收到400錯誤,報告缺少選件。 印刷的需求主體如下所示:

{ name: 'Poller',
  'options[0][name]': 'Jojo'\s Bizarre Adventure',
  'options[0][desc]': 'A great show',
  'options[1][name]': 'Bakemonogatari',
  'options[1][desc]': 'A real good show' } 'object'

我以前從未遇到過這個問題。 問題並不明確,因為郵遞員使用相同的數據進行了請求,並且可以正常工作。 我能想到的唯一問題在於,該請求是通過通過安全連接提供服務的iframe發出的,但這沒有任何意義。

我不知道是什么原因導致此錯誤。

根據 兩個問題,解決了該問題,在AJAX請求上指定了標頭類型並進行了字符串化。

$.ajax({
            method:"POST",
            url:"/api/poll/new",
            data:JSON.stringify(payload),
            contentType:"application/json",
            success:function(data){
                console.log(data);
            },
            error:function(req, status, error){
                console.log(req,status,error);
            }
        });

暫無
暫無

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

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