我无法从服务器响应中获取数组值 [已关闭]

I cant get array value from my server responce [closed]

提问人:Warsom 提问时间:5/7/2023 更新时间:5/7/2023 访问量:43

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

7个月前关闭。

我让我的服务器用字典回复我。 console.log(response) 返回以下内容:

{"filters":{
  "Facture": [
    "Магма (Тычок)",
    "Тонкий кирпич",
    "Гладкий",
    "Крафт",
    "Магма"
  ],
  "Color": [
    "Беж",
    "Черный",
    "Амстердам",
    "Лондон Брик",
    "Мюнхен",
    "Сити Брик"
  ],
  "Name": [
    "Облицованный кирпич стандартный пустотелый",
    "Тонкий колотый с ф. 180/11"
  ]
}}

但是当我尝试使用此代码访问该值时:

console.log(xhr.responseText);

const response = xhr.responseText;
console.log(response);

const myObj = JSON.parse(response);
console.log(myObj);

var names = myObj.Name.map(name => name.trim());
var types = myObj.Facture.map(type => type.trim());
var colors = myObj.Color.map(color => color.trim());

console.log(names);
console.log(types);
console.log(colors);

它在控制台中返回 undefined。请帮我获得价值.... 我得到的唯一线索是,如果我在脚本中创建这个对象,它可以正常工作,但是当我通过响应获取对象时不起作用

我从字面上尝试了一切: 更改服务器发送的数据 使用不同的代码访问值...

javascript json ajax jsp

评论


答:

1赞 Thomas Frank 5/7/2023 #1

更改此行:

const myObj = JSON.parse(response);

const myObj = JSON.parse(response).filters;

因为您查找的值似乎在属性过滤器中。

编辑

看,评论 - 事实证明服务器返回了“{...}”而不是 {...},所以我们不得不对它进行双重解析:

const myObj = JSON.parse(JSON.parse(response)).filters;

如果您可以控制服务器/后端,更好的解决方案是在那里解决此问题。

评论

0赞 Warsom 5/7/2023
那行不通。之后我在myObj上尝试了console.log,它返回为undefined。但是服务器响应是正确的,看起来和我的问题一样。也许完整的代码会有所帮助: xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200 && xhr.readyState == 4) { console.log(xhr.responseText); const response = xhr.responseText; console.log(response); const myObj = JSON.parse(response).filters; console.log(myObj);
0赞 Thomas Frank 5/7/2023
你到底从JSON.parse(response)中得到了什么 - 你试过console.logging吗?
0赞 Warsom 5/7/2023
我将其包含在我的问题中 - 它不是来自服务器的原始响应,它已经由 json.parse() 编辑
0赞 Warsom 5/7/2023
这里又是:{“filters”:{ “Facture”: [ “Магма (Тычок)”, “Тонкий кирпич”, “Гладкий”, “Крафт”, “Магма” ], “Color”: [ “Беж”, “Черный”, “Амстердам”, “Лондон Брик”, “Мюнхен”, “Сити Брик” ], “Name”: [ “Облицованный кирпич стандартный пустотелый”, “Тонкий колотый с ф. 180/11” ] }}
0赞 Thomas Frank 5/7/2023
它是一个对象。您可以在控制台中“折叠”它的属性吗?(我不是说字符串)