JavaScript - 数组值为空

时间:2016-04-15 05:57:37

标签: javascript jquery arrays ajax

我有一个独特的挑战: 在URL1(随机维基百科页面)上,向URL2(100个最常见的单词维基百科页面)发出ajax请求,从后面使用的返回数据创建数组。

我必须在“URL1”上从控制台运行它 例如:

  1. 导航至URL1
  2. 打开控制台
  3. 粘贴代码
  4. 点击进入
  5. 到目前为止,我已经能够与以下内容保持紧密联系:

     $.ajax({
        url: 'https://en.wikipedia.org/wiki/Most_common_words_in_English',
        type: 'GET',
        dataType: 'html',
        success: function(data) { 
              Names = $.map($(data).find('.wikitable tr'), function() { 
    return $(this).find('td:last').text()});
    console.log(Names);
        }           
    });        
    

    但是我的数组中有空值。

    在URL2(ajax请求中的链接)中,以下代码完美无缺

    var Names = $('.wikitable tr').map(function() { 
    return $(this).find('td:last').text() }).get(); console.log(Names);
    

    由于.get,我使用了这个确切的代码,因为删除它后,我得到了一个包含适当数量元素的数组,但它们都是空白的。

    由于

3 个答案:

答案 0 :(得分:4)

你的逻辑是正确的,你只是使用了错误的功能。 $.map$().map是不同的函数,具有不同的上下文和不同的参数。

如果使用正确的map功能,则应解决您的问题。变化

success: function(data) { 
    Names = $.map($(data).find('.wikitable tr'), function() { 
        return $(this).find('td:last').text();
    });
    console.log(Names);
}

success: function(data) { 
    Names = $(data).find('.wikitable tr').map(function() { 
        return $(this).find('td:last').text();
    });
    console.log(Names);
}

map的第二种形式中,this关键字设置为DOM元素。

我还注意到代码会返回105个文本而不是表格中的100个字词,因为它也会选择表格标题。 .map的另一个很酷的技巧是,如果你返回null,它将不包含结果中的值。因此,你可以像

Names = $(data).find('.wikitable tr').map(function() { 
    return $(this).find('td:last').text() || null;
});

作为空白字符串的评估结果为false,因此return将返回null而不是''。或者,您可以使选择器更具体,例如:

Names = $(data).find('.wikitable tr td:odd').map(function() { 
    return $(this).text();
});

答案 1 :(得分:0)

你是否也可以通过F12检查是否有任何错误。

XMLHttpRequest无法加载https://en.wikipedia.org/wiki/Most_common_words_in_English。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。

答案 2 :(得分:0)

只需使用Js映射迭代Jquery对象(Html元素对象)

InvoiceProducts

JQuery map仅适用于基元数组而不适用于对象

$(data).find('.wikitable tr').map(function() { 
        return $(this).find('td:last').text();