【发布时间】:2019-01-19 02:32:25
【问题描述】:
我进行了一个 ajax 调用,它从 .Net JsonConvert.SerializeObject() 调用返回了一个 json 字符串,该 json 会在浏览器中自动解析为一个对象,但我目前无法访问没有“未定义”的属性" 被退回。
我当前返回的 json 字符串是(删除了大部分字节数组):
"[{\"filename\":\"\",\"size\":6,\"csize\":\" 5.85 KB\",\"extfile\":\"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDA....AAAAAAAAAAAf//Z\"}]"
我已经验证过了,一切都很好。
我的 javascript 是:
function GetItemImage() {
let kditem = $("#txtItem").text();
let url = GetUrl();
$.ajax({
url: url,
type: "POST",
data: JSON.stringify({
"kditem": kditem
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data != null) {
$("#ImgItem").attr("src", "data:image/png;base64,'" + data.extfile + "'");
}
}
});
}
我已经确定它绝对是一个对象。我尝试以 data.extfile、data["extfile"] 的形式访问,将 extfile 作为字节数组传入,然后访问它,但它总是以“未定义”的形式出现。在绝望中,我什至尝试访问索引、遍历对象等,但仍然一无所获。
我感觉 json 字符串中存在一个问题,导致它无法正确转换,但我看不到它,因为我对 json 工作不多。有人能指出我哪里出错了吗?
解决方案
Javascript 将响应解析为具有单个属性“data.d”的对象,解析了 data.d 并正确创建了该对象。
function GetItemImage() {
let kditem = $("#txtItem").text();
let url = GetUrl();
$.ajax({
url: url,
type: "POST",
data: JSON.stringify({
"kditem": kditem
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data != null && data.d != null) {
let imgData = JSON.parse(data.d);
$("#ImgItem").attr("src", "data:image/png;base64," + imgData[0].extfile);
}
}
});
}
【问题讨论】:
-
console.log(data)呢,它显示了什么? -
...还有
console.log("data type is: " + (typeof data)); -
如果你得到的json字符串是
data,基本上就是一个数组,而不是一个对象。 -
您的
data是一个对象数组。所以你应该使用data[0].extfile -
console.log 返回:{d: "[{"filename":"","size":6,"csize":" 5.85 KB",…AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Z"}]" } typeof 返回:对象
标签: javascript jquery json ajax