我有这个ajax
函数,它发送一个数组参数并将其保存到db。它工作正常,因为它已在我们的项目中多次调用。
这是函数的快照:
function InsertProjectList(projectList, pageUrl, remark) {
if (projectList.length === 0) return;
$.ajax({
type: "POST",
url: "/StatsService.asmx/InsertListToProjectStats",
data: "{ 'projectList': " + JSON.stringify(projectList) + ", 'pageUrl': '" + encodeURI(pageUrl) + "', 'remark': '" + escape(remark) + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () { },
complete: function () { },
success: function (data) {
},
error: function (a, b, c) {
}
});
}
但是后来我通过跟随jquery操作得到了这个projectlist
,它确实返回了一个类似["195", "254", "784"]
的数组,我希望在这种情况下我的ajax is unable
发送list参数。我想知道这里有什么问题吗?浏览器控制台显示Uncaught TypeError: Converting circular structure to JSON.
var projectList = $("ul#plist .project-list").filter(':onScreen').map(function () {
return $(this).attr("projectid");
});
InsertProjectList(projectList, $(location).attr("href"), remarkText[4]);
我知道我可以使用jQuery each
函数来获取projectId
这个数组,但这不是我的意图。
答案 0 :(得分:0)
不要在data
字段上加上引号,并尝试传递该对象而不对其进行字符串化。
而且我不认为你可以对一个数组进行字符串化(它看起来像一个数组,不是吗?)
function InsertProjectList(projectList, pageUrl, remark) {
if (projectList.length === 0) return;
$.ajax({
type: "POST",
url: "/StatsService.asmx/InsertListToProjectStats",
data: { projectList: JSON.stringify(projectList)
, pageUrl : encodeURI(pageUrl)
, remark: escape(remark)
},
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () { },
complete: function () { },
success: function (data) {
},
error: function (a, b, c) {
}
});
}
在这种情况下,您应该能够将对象(作为数组)传递给ajax请求。
答案 1 :(得分:0)
您的问题是您是从jQuery .map()
函数返回的。它没有返回一个javascript数组,它返回一个有一个数组的jquery对象。因此JSON.stringify
超过该对象无法工作,因此您拥有TypeError
。
var projectList = $("ul#plist .project-list").filter(':onScreen').map(function () {
return $(this).attr("projectid");
}).get();
.get()
会将您的.map()
对象转换为javascript数组,然后您就可以JSON.stringify()
了。