我正在通过 $.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
。
此外,我刚刚注意到 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/