我有一个独特的挑战: 在URL1(随机维基百科页面)上,向URL2(100个最常见的单词维基百科页面)发出ajax请求,从后面使用的返回数据创建数组。
我必须在“URL1”上从控制台运行它 例如:
到目前为止,我已经能够与以下内容保持紧密联系:
$.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,我使用了这个确切的代码,因为删除它后,我得到了一个包含适当数量元素的数组,但它们都是空白的。
由于
答案 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();