Javascript $.ajax return“;“错误”;尝试发送长JSON时
我在JS中生成对象数组,然后使用Javascript $.ajax return“;“错误”;尝试发送长JSON时,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我在JS中生成对象数组,然后使用$.ajax(使用'JSON.stringify(myData)')将其发送到PHP 当数组中有50个对象(JSON.length==2401)时,它可以正常工作,但当数组中有77个对象(JSON.length==3709)时,它返回“error” 对象结构: { user_id: "27", hours: "2", service_id: "561" } 为什么会发生这种“错误” 当我尝试发送长JSON时,我会在域日志中获得带有“000”代码的“access”
$.ajax(使用'JSON.stringify(myData)')将其发送到PHP
当数组中有50个对象(JSON.length==2401)时,它可以正常工作,但当数组中有77个对象(JSON.length==3709)时,它返回“error” 对象结构:
{ user_id: "27", hours: "2", service_id: "561" }
为什么会发生这种“错误”
当我尝试发送长JSON时,我会在域日志中获得带有“000”代码的“access”条目,没有任何数据。JSON字符串有效,请使用联机JSON解码器进行检查 发送AJAX的代码:
requestReport() {
this.makeObjectForAjax();
const requestString = this.entriesForAjax;
const auth = $('#auth').text();
console.log(requestString);
$.ajax({
url: "/bitrix/TimeSheet/generateReport.php",
data: {
'data' : requestString,
'auth' : auth
},
success: function (data, textStatus) {
console.log(data);
console.log(textStatus);
},
error: function (data, textStatus, thrown) {
console.log(data);
console.log(textStatus);
console.log(thrown);
}
});
}
因此,$.ajax
执行'error:function','textStatus'='error','shown'是空字符串
该方法首先从JS获取的原始数据生成一个数组,然后生成JSON
makeObjectForAjax() {
let entriesArray = [];
this.rawEntries.forEach(function (record) {
let newObj = {
'user_id' : Object.values(record.PROPERTY_117)[0],
'hours' : Object.values(record.PROPERTY_119)[0],
'service_id' : Object.values(record.PROPERTY_275)[0],
};
entriesArray.push(newObj);
});
this.entriesForAjax = JSON.stringify(entriesArray);
}
log(entriesArray)显示对象数组是有效的在线JSON解码器表示来自
this.entriesForAjax = JSON.stringify(entriesArray);
这也是有效的
UPD:已解决!问题是,$。默认情况下,ajax
发出GET请求。添加了类型:“POST”
,现在它可以工作了感谢@Phil对您的数据类型的评论:“json”只告诉jQuery您希望它解析返回的json,这并不意味着jQuery将自动字符串化您的请求数据
$.ajax({
type: "POST",
url : "URL",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
user_id: 27,
hours: 2,
service_id: 561,
}),
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
您实际上并没有发送JSON。您正在传递一个对象作为数据,但是您需要字符串化该对象并传递字符串,而且您还缺少类型:post或get 您的数据类型:“json”只告诉jQuery您希望它解析返回的json,并不意味着jQuery将自动字符串化您的请求数据
$.ajax({
type: "POST",
url : "URL",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
user_id: 27,
hours: 2,
service_id: 561,
}),
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
改为:
$.ajax({
type: 'POST',
url: "/bitrix/TimeSheet/generateReport.php",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
'data' : requestString,
'auth' : auth
}),
success: function (data, textStatus) {
console.log(data);
console.log(textStatus);
},
error: function (data, textStatus, thrown) {
console.log(data);
console.log(textStatus);
console.log(thrown);
}
});
你能分享你的代码吗?还有,错误是什么?你在哪里看到的?网络检查器说发生了什么?这是从本地数据库获取的任何API或简单数据吗?请在中检查请求本身。查看标题是什么(请求和响应的标题),以及响应的主体是什么。@phil只需将
type:'POST
添加到$.ajax即可解决此问题。非常感谢。