0

我想解析这样的广播页面: http ://relay.181.fm:8800/played.html 所以,我只是让ajax 来调用一个php 文件。php 文件返回页面的所有内容。我将 html 内容存储到 js 中的 var 中。这是代码:PHP:

function getcontent($server, $port, $file){
    $cont = "";
    $ip = gethostbyname($server);
    $fp = fsockopen($ip, $port);
    if (!$fp){
        return "Unknown";
    }
    else{
        $com = "GET $file HTTP/1.1\r\nAccept: */*\r\nAccept-Language: de-ch\r\n"
        ."Accept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible;"
        ." MSIE 6.0;Windows NT 5.0)\r\nHost: $server:$port\r\n"
        ."Connection: Keep-Alive\r\n\r\n";
        fputs($fp, $com);
        while (!feof($fp))
        {
            $cont .= fread($fp, 500);
        }
        fclose($fp);
        $cont = substr($cont, strpos($cont, "\r\n\r\n") + 4);
        return $cont;
        }
}
echo (getcontent("relay.181.fm", "8800", "/played.html"));

这是我的js:

var xhr = new XMLHttpRequest();
var parsed;
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        parsed=xhr.response;

    }
};
xhr.open("GET", 'http://localhost/getsong.php', true);
xhr.send(null);

这就是我想要得到的:

$(document).ready(function(){
var songs=new Array();
var time=new Array();
for (var i = 0; i < 10; i++) {
    songs[i]=$('table:eq(2) tr:eq('+(i+1)+') td:eq(1)').text();
    time[i]=$('table:eq(2) tr:eq('+(i+1)+') td:eq(0)').text();
};
});

如果我复制 xhr.response 内容并将其放入 html 文件并执行此 js,它会返回我想要的内容。但是当html在变量中时我不明白我该怎么做...... :'(

PS:我在一个 wamp 环境中工作。和一个 node.js 环境。

4

4 回答 4

0

我认为,您可以使用 innerHTML 来解决

var xhr = new XMLHttpRequest();
var parsed;
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        parsed=xhr.response;  
        document.getElementById('#div').innerHTML =  parsed;

    }
};
xhr.open("GET", 'http://localhost/getsong.php', true);
xhr.send(null);
于 2013-09-05T08:06:00.650 回答
0

既然你用 jQuery 标记了它,为什么不使用内置的 ajax 功能:

 $.ajax({
     url: 'http://localhost/getsong.php',
     dataType: 'html'
 }).done(function(data){
      //do something with the HTML
      var $html = $(data),
          tdtexts = $html.find('table:eq(2) tr td:first').text();
 });

这是你要求的吗?

于 2013-09-05T08:06:49.013 回答
0

获得后继续前进response可能会对您有所帮助,

var xhr = new XMLHttpRequest();
var parsed;
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        parsed=$.parseHTML(xhr.response);
        var songs=new Array();
        var time=new Array();
        for (var i = 0; i < 10; i++) {
            songs[i]=$(parsed).find('table:eq(2) tr:eq('+(i+1)+') td:eq(1)').text();// use find function for parsed string
            time[i]=$(parsed).find('table:eq(2) tr:eq('+(i+1)+') td:eq(0)').text();
        };
    }
};
xhr.open("GET", 'http://localhost/getsong.php', true);
xhr.send(null);

通过使用$.ajax()

$(function(){
    $.ajax({
        url:'http://localhost/getsong.php',
        dataType:'html',
        success:function(parsed){
            var songs=new Array();
            var time=new Array();
            for (var i = 0; i < 10; i++) {
                songs[i]=$(parsed).find('table:eq(2) tr:eq('+(i+1)+') td:eq(1)').text();// use find function for parsed string
                time[i]=$(parsed).find('table:eq(2) tr:eq('+(i+1)+') td:eq(0)').text();
            };
        }
    });
});
于 2013-09-05T08:09:34.270 回答
0

我认为您正在寻找 jQuery.parseHTML()。它会将您的字符串解析为一个 DOM 节点数组。

http://api.jquery.com/jQuery.parseHTML/

这是您的案例的一个简单示例:

$.get('http://relay.181.fm:8800/played.html')
.done(function(data) {
    var parsed = $.parseHTML(data);
    // Now parsed is an array of DOM elements which you can use selectors on, eg:
    var song1 = $(parsed).find('table:eq(2) tr:eq(1) td:eq(1)').text();
    console.log(song1);
});
于 2013-09-05T08:24:27.917 回答