【问题标题】:JavaScript Saving data from an ajax requestJavaScript 保存来自 ajax 请求的数据
【发布时间】:2016-04-14 22:12:02
【问题描述】:

挑战: 在 URL1(随机维基百科页面)上,向 URL2(100 个最常用词维基百科页面)发出 ajax 请求,从返回的数据中格式化列表以供以后使用。

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

  1. 导航到 URL1
  2. 打开控制台
  3. 粘贴代码
  4. 回车

到目前为止,我已经能够在 URL1 上使用以下内容获取整个 html 源代码:

$.ajax({
    url: 'https://en.wikipedia.org/wiki/Most_common_words_in_English',
    type: 'GET',
    dataType: 'html',
    success: function (response) {
        console.log(response); // works as expected (returns all html)
    }
});

我可以在控制台中看到整个 HTML 源代码——然后我转到 URL2 以了解如何获取和格式化我需要的内容,我能够做到这一点:

var array = $.map($('.wikitable tr'),function(val,i){
        var obj = {};
        obj[$(val).find('td:first').text()] = $(val).find('td:last').text();
        return obj;
    });
console.log(JSON.stringify(array));

现在这就是我的问题所在——将两者结合起来

$.ajax({
url:'https://en.wikipedia.org/wiki/Most_common_words_in_English',
type:'GET',
dataType:'html',
success: function(data){
    // returns correct table data from URL2 while on URL2 -- issue while running from URL1
    var array = $.map($('.wikitable tr'),function(val,i){
        var obj = {};
        obj[$(val).find('td:first').text()] = $(val).find('td:last').text();
        return obj;
        });
console.log(JSON.stringify(array));
    };
});

我猜这是因为我想要映射的 HTML 现在是一个字符串,而我的数组正在当前页面上寻找它当然找不到的 HTML 元素。

谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow。没有某种示例数据,您的问题太抽象了。你有 data 在你的 ajax 中返回,但从不使用它。
  • 如果您只想针对data 中包含的 HTML 运行您的匹配,只需执行var content = $(data); 然后执行$('.wikitable tr', content),如果那是您的.wikitable 所在的位置。

标签: javascript jquery ajax


【解决方案1】:

这里简单修复!你说得对,它不会解析你返回的 html,所以只需告诉 jQuery 将其转换为可以使用$(data) 的对象并使用它来查找你需要的内容。

实质上,您的“文档”现在变为$(data),您将使用它作为所有查询的来源。

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

【讨论】:

  • 您好,acupajoe,感谢您的最后一个——但我后来意识到这样做对我来说是不正确的。 var Names = $('.wikitable tr').map(function() { return $(this).find('td:last').text() }).get();这可以从 URL2 完美运行,但是 [在下一条评论中继续]
  • 当我像这样从 URL1 实现和运行它时,它会出错:$.ajax({ url: 'en.wikipedia.org/wiki/Most_common_words_in_English', type: 'GET', dataType: 'html', success: function( data) { var myVar = data; 名称 = $.map($(myVar).find('.wikitable tr'), function() { return $(this).find('td:last').text() }).get(); console.log(Names); } });
  • 我注意到如果我删除了 .get() 它会返回一个包含适当数量元素的数组,但它们都是空白的,比如 "","","","" 而不是 foo , 酒吧, baz 等
  • 我已经编辑了我的答案来解决这个问题,这是$(this) 的问题,请确保您使用console.log() 来调试您的代码并确保变量是您所期望的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2016-06-17
相关资源
最近更新 更多