Ajax会自动在成功调用中返回的变量数据周围加上双引号
我正在尝试在MVC应用程序中使用Ajax构建chartjs水平条形图。每次数据返回时,它都会在变量返回的数据周围加上双引号 我的代码:Ajax会自动在成功调用中返回的变量数据周围加上双引号,ajax,asp.net-mvc,chart.js,Ajax,Asp.net Mvc,Chart.js,我正在尝试在MVC应用程序中使用Ajax构建chartjs水平条形图。每次数据返回时,它都会在变量返回的数据周围加上双引号 我的代码: **<script> $("#charts").click(function () { $.ajax({ type: "POST", url: rootDir + "Usd/provStDtAll&quo
**<script>
$("#charts").click(function () {
$.ajax({
type: "POST",
url: rootDir + "Usd/provStDtAll",
dataType: 'json',
async: false,
cache: false,
timeout: 30000,
data: {},
success: function (adata) {
var sDate = '';
var ooSum = '';
var bgC = '';
for (var i = 0; i < adata.length; i++) {
sDate += '"' + adata[i].startDate + '",';
ooSum += adata[i].oSum + ',';
bgC += '"' + adata[i].bgcolor + '",';
}
console.log(sDate);
console.log(ooSum);
console.log(bgC);
var ctx = document.getElementById('psdChart').getContext('2d');
var chart1 = new Chart(ctx, {
type: 'horizontalBar',
data: {
labels: [sDate],
datasets: [
{
label: 'Start Date',
backgroundColor: [bgC],
data: [ooSum]
}
]
},
options: {
responsive: true,
scales: {
yAxes: [{
display: true,
ticks: { beginAtZero: true }
}],
xAxes: [{
display: true,
ticks: { beginAtZero: true }
}]
},
legend: { display: false },
title: {
display: true,
text: 'Providers by Start Date'
}
}
});
chart1.render();
}
});
});
</script>**
这会导致图表无法正确呈现,因为所有数据都包含在引号中
我想让变量返回这样的值
**sDate = "Nov 2020","Mar 2021","Jan 2021","Feb 2021","Dec 2020","Apr 2021",
bgC = "#00437d","#00437d","#00437d","#00437d","#00437d","#00437d",
ooSum = 1,57,18,26,1,9,**
我做错了什么???任何帮助都将不胜感激
更新:
控制器如下所示
[HttpPost]
public JsonResult provStDtAll()
{
var psdAll = (from a in _signalContext.tIList.AsEnumerable()
where a.StartDate != null
group a by new { StartDate = String.Format("{0:MMM yyyy}",
a.StartDate) } into b
orderby b.Key.StartDate descending
select new { b.Key.StartDate, oSum = b.Count(), bgcolor =
"#00437d" }).ToList();
return Json(psdAll);
}
和console.log(adata)返回以下内容
Array(6)
0: {startDate: "Nov 2020", oSum: 1, bgcolor: "#00437d"}
1: {startDate: "Mar 2021", oSum: 57, bgcolor: "#00437d"}
2: {startDate: "Jan 2021", oSum: 18, bgcolor: "#00437d"}
3: {startDate: "Feb 2021", oSum: 26, bgcolor: "#00437d"}
4: {startDate: "Dec 2020", oSum: 1, bgcolor: "#00437d"}
5: {startDate: "Apr 2021", oSum: 9, bgcolor: "#00437d"}
length: 6
__proto__: Array(0)
concat: ƒ concat()
constructor: ƒ Array()
copyWithin: ƒ copyWithin()
entries: ƒ entries()
every: ƒ every()
fill: ƒ fill()
filter: ƒ filter()
find: ƒ find()
findIndex: ƒ findIndex()
flat: ƒ flat()
flatMap: ƒ flatMap()
forEach: ƒ forEach()
includes: ƒ includes()
indexOf: ƒ indexOf()
join: ƒ join()
keys: ƒ keys()
lastIndexOf: ƒ lastIndexOf()
length: 0
map: ƒ map()
pop: ƒ pop()
push: ƒ push()
reduce: ƒ reduce()
reduceRight: ƒ reduceRight()
reverse: ƒ reverse()
shift: ƒ shift()
slice: ƒ slice()
some: ƒ some()
sort: ƒ sort()
splice: ƒ splice()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
unshift: ƒ unshift()
values: ƒ values()
Symbol(Symbol.iterator): ƒ values()
Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …}
__proto__: Object
根据您的代码,我认为您需要为变量定义数组而不是字符串。例如:
var sDate = [];
var ooSum = [];
var bgC = [];
for (var i = 0; i < adata.length; i++) {
sDate.push(adata[i].startDate);
ooSum.push(adata[i].oSum);
bgC.push(adata[i].bgcolor);
}
也许停止用引号括住数据。。。您正在使用代码执行此操作。您希望得到什么输出?问题是双引号将整个字符串括起来。对于oSum变量,我没有在该变量中加任何引号,但在运行后会出现双引号。能否显示控制器jsonresult provStDtAll?能否显示以下结果:console.log(adata),包括此odata的属性结果。如果这些是数组结果,请显示结果。感谢@Adlorem和Willy的关注!这件事把我难住了。我认为这与我何时以及如何调用变量有关。非常感谢您在这方面的帮助!我一贴上它,它就起了很大的作用。很高兴我能帮上忙。
var sDate = [];
var ooSum = [];
var bgC = [];
for (var i = 0; i < adata.length; i++) {
sDate.push(adata[i].startDate);
ooSum.push(adata[i].oSum);
bgC.push(adata[i].bgcolor);
}
data: {
labels: sDate,
datasets: [
{
label: 'Start Date',
backgroundColor: bgC,
data: ooSum
}
]
},