试图访问字符串数组,即使它已满,也说它是空的

时间:2018-06-05 20:33:11

标签: javascript arrays string

当我试图访问我存储在字符串数组中的文本时,我遇到了问题。我知道,问题似乎很容易,但我无法弄清楚我哪里出错...

因此,当我将控制台的内容记录到浏览器时,我可以看到我得到的值如下:

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>');  

    }
}    

}

1 个答案:

答案 0 :(得分:-1)

首先添加到网址&origin=*,否则您将收到来自维基的错误

  

无法加载   https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=java:   请求中不存在“Access-Control-Allow-Origin”标头   资源。因此不允许原点'null'访问。如果是不透明的   响应满足您的需求,将请求的模式设置为'no-cors'   在禁用CORS的情况下获取资源。

其次,您需要等待数据才能访问它们。 如果您希望将它们存储在textContent = []数组中,那么如果您在完成与http://wiki.api的连接之前阅读它并获得响应,则将其清空。

您可以将第二个功能重写为就地readData(singleContent)并在当时使用一个项目。这样您就不需要等待来自wiki的每个响应。

这是在vanilla 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如何查看每个请求时(它有多少项)。