2014-09-06 2 views
0

Я пытаюсь очистить первый абзац от wikipedia, используя только javascript. В общем, что я хочу сделать, этоИзвлечь данные с веб-страницы

document.getElementsByTagName("P")[0] 

исключением того, что не на моей веб-странице, я хочу, чтобы принести данную страницу из Википедии и применить эту функциональность. Мои текущие коды дают:

Uncaught TypeError: undefined is not a function 

Моему код:

function getWikiDescription(searchTerm) 
{ 
    var theURL = "http://en.wikipedia.org/wiki/" + searchTerm.replace(" ", "_"); 
    var article = null; 
    $.get(theURL, function(data){ 
     wikiHelper(data); 
    }, "html"); 
} 
function wikiHelper(data) 
{ 
    alert(data); 
    console.log(data.getElementByTagName("p")[0]); 
} 
getWikiDescription("godwin's law"); 

данные в основном становятся гигантской строкой, содержащей все HTML, но функция getElementByTagName не работает. Любая помощь будет оценена, спасибо заранее.

+1

Это 'getElementsByTagName', с' s'. (Это может все еще не работать, но это начало!) – Ryan

+0

Хороший улов, но это не решило его. – gmaster

+1

Это строка, а не дерево. 'getElementsByTagName' работает на дереве dom, а не на строке (и строка фактически не имеет этого метода). –

ответ

0

Браузеры обычно не позволяют отправлять запросы ajax в домены, отличные от тех, где возникает сценарий. Вы не можете просто отправить и ajax-запрос на любую страницу по своему вкусу. Подробнее о same origin policy и о ways to circumvent this.

0

вы можете использовать JSONP, которые, как JQuery и поддержка Wikimedia API (почитая Парам ?callback=? запроса)

"use strict"; 

var endpoint = 'http://en.wikipedia.org/w/api.php'; 

$.ajax({ 
    url: endpoint, 
    crossDomain: true, 
    dataType: 'jsonp', 
    data: { 
     format: "json", 
     action: "parse", 
     page: "Bay_View_Historical_Society" 
    }, 
    error: function(xhr,status,error){ 
     alert(error); 
    } 
}).done(function(rawhtml){ 
    var dom_object = $('<div>' + rawhtml.parse.text['*'] + '</div>'); 
    var p = $(dom_object).find('p').first(); 
    p.appendTo('#output'); 
}); 

рабочий пример:

http://jsfiddle.net/sean9999/0h4t0ybd/2/

JQuery не является строго необходимым, но он делает код кратким и читаемым.

Код выполняет следующие функции:

  1. делает запрос JSONP для содержания
  2. вытягивает разметки вниз в виде текста
  3. Преобразует текст в DOM структуры
  4. Запрашивает структуру DOM для первый узел (doc.getElementsByTagName("P")[0])
Смежные вопросы