javascript - 对象属性在 $.ajax POST 请求中丢失

标签 javascript php jquery ajax laravel

我正在通过 $.ajax 上传一个大型数据集作为 JSON,在上传过程中一些属性丢失了。出于测试目的,服务器返回第一行,其中缺少一个属性。

javascript

function parseResults(data) {
    var send = [];
    for (var x in data) {
        var row = data[x],
            code = row["ORDER"];
        if (typeof code === "undefined") continue;
        if (code == "") continue;
        var temp = {
            code: code,
            date: row["CREATED DATE"] + " " + row["CREATED TIME"],
            pt: row["PAYMENT_CODE"],
            loc: row["LOCATION"],
            fv: row["ORDER VOLUME"],
            fpdf: row["DELIVERY FEE"],
            fpsf: row["SERVICE FEE"],
            vsf: row["REST. SERVICE FEE"],
            pr: row["PAY RESTAURANT"],
            to: row["TOTAL ORDER"],
            delc: row["ORDER PROVIDER"],
            city: row["City"],
            vp: row["VENDOR PROVIDER"],
            rest: row["VENDOR"],
            vouch: row["VOUCHER AMOUNT"],
            cust: row["CUST CODE"],
            st: row["STATUS"]
        };
        send.push(temp);
    }
    sendResults(send);
}

function sendResults(data) {
    for (var x in data) {
        if (data[x].code == "m0sq-p0yq") {
            // this one is here just for testing
            // purposes, you will see
            console.log(data[x]);
        }
    }
    $.ajax({
        type: "POST",
        url: "/ordersfp/process",
        data: {
            data: data
        },
        success: function(response) {
            console.log(response);
        }
    }, "json");
}

php

public function handleProcess()
{
    $data = Input::all();
    foreach ($data['data'] as $row) {
        if (!isset($row['cust'])) {
            return $row;
        }
        // ...
    }
}

所以一切正常,唯一的问题是这个代码为 "m0sq-p0yq" 的特定元素在某处丢失了属性 cust

Console Log of this object

此外,我刚刚注意到 st 属性也丢失了 -.- 请帮忙 :)

最佳答案

您的 ajax 请求未将数据编码为 JSON 格式,因此它试图将您的复杂数据结构发送为 application/x-www-form-urlencoded。 $.ajax 调用中的 "json" 参数不执行任何操作。

jQuery 的 $.ajax接受:

  • 第一个参数是一个 URL 字符串,第二个参数是一个设置对象
  • 第一个参数是一个设置对象,没有进一步的参数

将 ajax 更改为:

$.ajax({
    type: "POST",
    url: "/ordersfp/process",
    data: {
        data: JSON.stringify(data) // encode to JSON
    },
    success: function(response) {
        console.log(response);
    }
});

在 PHP 端,解码 JSON:

$data = Input::all();
$decoded = json_decode($data['data']);
foreach ($decoded as $row) {

关于javascript - 对象属性在 $.ajax POST 请求中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272630/

相关文章:

php - 我如何在php中使用两个带有用户定义变量的mysql查询

javascript - 如何使用 google maps api 制作自动完成地址字段?

php - Symfony2 bundle 和 Travis-CI

php mysql数组限制

javascript - OnChange - 如果按下 Shift 或 Control 键则暂停功能

javascript - 评论的滑动/滚动效果

javascript - 必须为内部事件指定默认脚本语言

javascript - JSPM bundle 与 requireJs 的混淆

javascript - 如何使用 Dojo 创建密码输入?

javascript - 分区显示:none - want to only load content when it's visible