将URL加载到AJAX而不是点击和解析结果?

时间:2012-01-04 00:00:11

标签: javascript jquery

我有一个网页编写技术都在PHP中解决,直到我发现我正在开发它的平台(iOS通过手机间隙)不支持PHP。我通过JS找到了解决方案。

$(document).ready(function(){
  var container = $('#target');
  $('.ajaxtrigger').click(function(){
    doAjax($(this).attr('href'));
    return false;
  });
  function doAjax(url){
    if(url.match('^http')){
      $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                "q=select%20*%20from%20html%20where%20url%3D%22"+
                encodeURIComponent(url)+
                "%22&format=xml'&callback=?",
        function(data){
          if(data.results[0]){
            var data = filterData(data.results[0]);
            container.html(data);
          } else {
            var errormsg = '<p>Error: could not load the page.</p>';
            container.html(errormsg);
          }
        }
      );
    } else {
      $('#target').load(url);
    }
  }
  function filterData(data){
    data = data.replace(/<?\/body[^>]*>/g,'');
    data = data.replace(/[\r|\n]+/g,'');
    data = data.replace(/<--[\S\s]*?-->/g,'');
    data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
    data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
    data = data.replace(/<script.*\/>/,'');
    return data;
  }
});

加载网址的方式是点击链接,然后获取href,并填充url(至少我认为)。我希望网址是静态的,例如http://website.com并且预先填充。我尝试用doAjax(url)替换所有doAjax('http://website.com),但这似乎不起作用,我想知道我做错了什么。

新JS脚本的另一个问题是我希望能够解析结果并仅显示table元素。在PHP中,我使用:

data =  $html->find('table');
echo $data[1];

该PHP函数的javascript中的等价物是什么?

在旁注中,我正在考虑将其分成两个帖子,但我认为今晚会有太多帖子:)

编辑:@nnnnnn在评论中解决了第一个问题。

2 个答案:

答案 0 :(得分:1)

至于第一部分,试试这个:

function doAjax(url) {
    url = url || 'http://website.com';   // fallback to str if url isnt defined

    // ... rest of your code
}

第二部分尝试(假设data.results[0]是原始html的位置):

$(data.results[0]).find('table');   // may have to use .filter() if node is in root

答案 1 :(得分:1)

如果您在点击链接时(通过点击处理程序调用{​​{1}}功能)说上述代码有效,但您还想自动为doAjax()调用它而无需点击,只需将'http://website.com'添加到document.ready函数的末尾。

至于从响应中提取一个特定的表,在你的ajax回调函数中你可以从返回的数据创建一个jQuery对象,然后使用jQuery的.find()方法来提取你关心的部分,以及.append()将该部分添加到容器元素中:

doAjax('http://website.com');

请注意, function(data){ if(data.results[0]){ var fullResponse = $(filterData(data.results[0])), justTable = fullResponse.find("table"); container.append(justTable); } else { var errormsg = '<p>Error: could not load the page.</p>'; container.html(errormsg); } } 的选择器可能需要更多信息才能明确选择您正在谈论的表格。不确定.find()是否会这样做,或者该表是否具有您可以使用的ID属性:"table:first"或者......?