javascript - 试图访问字符串数组,说它是空的,即使它已满
问题描述
当我尝试访问存储在字符串数组中的文本时遇到问题。我知道,这个问题看起来很简单,但我就是不知道我哪里出错了......
因此,当我通过控制台将数组的内容记录到浏览器时,我可以看到我得到的值如下:
console.log(myStringArray)
output:
10[...]
0: "a lot of text here"
1: "also here"
2: "and here... etc"
...
但是当我尝试访问以下值时:
myStringArray[0];
我得到的结果是一个单槽数组,其中没有任何内容,例如:
(1)[...]
0: ""
length: 1
>_proto__: Array[]
尝试将结果转换为字符串等也效果不佳。有人可以帮我访问这些值吗,谢谢!
编辑: 我得到的文本是来自 wiki:s API 的文章。
function getMoreText(){
for(let j = 0; j < titlesInSearch.length; j++){
textContent[j] = [''];
textUrl = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=' + titlesInSearch[j];
$.getJSON({
url: textUrl,
dataType: "jsonp",
success: function(data, status, xhr) {
var page = data.query.pages;
var pageId = Object.keys(page)[0];
if(page[pageId].title == titlesInSearch[j]){
textContent[j] = page[pageId].extract;
}
}
})
}
}
当我在控制台记录值时,当我要更新 HTML 代码时,结果正如我上面解释的那样:
function updateGUI(){
//resetting when getting new articles
document.getElementById("artikel").innerHTML = '';
//getting the result
console.log(textContent);
//not getting anything
console.log(textContent[0]);
for(let b = 0; b < titlesInSearch.length; b++)
{
console.log(textContent[b]);
if(summary[b].includes("may refer to:")){
console.log("filtered: 'may refer to'") //do nothing
}
else if(summary[b] != ''){
document.getElementById("artikel").innerHTML += ('<div>' + textContent[b] +'</div>');
}
}
}
解决方案
首先添加到 url&origin=*
其他方式你会从 wiki 得到错误
无法加载 https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=java:请求的资源上不存在“Access-Control-Allow-Origin”标头. 因此,Origin 'null' 不允许访问。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
其次,您需要等待数据才能访问它们。如果您想将它们存储在textContent = []
数组中,如果您在完成与http://wiki.api的连接并获得响应之前阅读它,则为空。
您可以重写第二个函数以在原地readData(singleContent)
工作并一次使用一个项目。这样您就不需要等待来自 wiki 的每个响应。
这是在原版 javascript 中,但在 $.getJsons 或 $.ajax 中的想法是相同的。
/* jshint node: true */
//var fetch = require('node-fetch')
var titlesInSearch = ['java', 'linux']
var textContent = []
function getMoreText(){
"use strict"
titlesInSearch.forEach(function(searchItem){
var url = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&origin=*&titles=' + searchItem
return fetch(url)
.then(function(response){
return response.json()
})
.then(function(data) {
var page = data.query.pages;
var pageId = Object.keys(page)[0];
var singleContent =''
if (page[pageId].title.toUpperCase === searchItem.toUpperCase) {
singleContent = page[pageId].extract
textContent.push(singleContent.substring(0,50)) //short str
}
readData(singleContent)
})
})
}
getMoreText()
function readData(singleContent){
"use strict"
// read data one by one
console.log(singleContent)
console.log('-----------------------------')
console.log(textContent) // array
}
注意console.log('---------'),你会看到有趣的东西。当你单身时singleContent
,数组textContent
在每个请求上的外观(它有多少项目)。
推荐阅读
- python - 频道创建上的 discord.py
- javascript - Javascript - 在数组中查找最频繁的数字,即使有两个
- haskell - 双向加法约束
- javascript - Mocha/Chai/ChaiAsPromised:expect(promise).eventually 不等待解决
- dask - rioxarray 中使用 Dask 进行大型写入操作的内存错误
- python - 在某些情况下,Web Scraping 新闻文章返回空正文
- flutter - 如何从 Firestore 制作饼图
- python - 如何使用python按数字和名称对文本文件中的数据进行排序?
- python - Python venv使用系统python?
- azure - How do I make Azure Pipelines aware of the YAML file already in the repo?