我进行了ajax调用,该调用从.Net JsonConvert.SerializeObject()调用返回了一个json字符串,该json被自动解析为浏览器中的对象,但是如果没有“ undefined”,我目前无法访问该属性”。
我当前返回的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作为字节数组传递,然后访问它,但它总是以“ undefined”的形式出现。无奈之下,我什至尝试访问索引,遍历对象等,但还是一无所获。
我感觉到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);
}
}
});
}
答案 0 :(得分:1)
基本上,如果您粘贴的string
是响应(数据),则在使用JSON.parse()
时它会转换为数组,因此您应该这样使用它。
const stringResponse = "[{\"filename\":\"\",\"size\":6,\"csize\":\" 5.85 KB\",\"extfile\":\"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDA....AAAAAAAAAAAf//Z\"}]"
const parsedResponse = JSON.parse(stringResponse);
console.log(parsedResponse)
const entry = parsedResponse[0];
console.log(entry.extfile)
所以基本上,您需要这样做:
data[0].extfile
由于console.log(data)语句返回:
{d: "[{"filename":"","size":6,"csize":" 5.85 KB",…AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Z"}]"}
您实际尝试获取的数据包含在接收到的数据的d属性中包含的JSON字符串中。如果要解析字符串然后访问extfile属性,则将拥有数据:
var actualData= JSON.parse(data.d);
var extfile = actualData[0].extfile;
答案 1 :(得分:-1)
不知道这是否有帮助,但在这里是
弃用注意事项:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调已删除。您可以改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。
http://api.jquery.com/jquery.ajax/
该数据也是一个数组,也许获取数组data [0] .extfile中的第一个对象。
我认为它可能会这样修改:
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"
}).done(function(data){
if (data != null) {
$("#ImgItem").attr("src", "data:image/png;base64,'" +
data[0].extfile + "'");
}
});
}