【问题标题】:Load part of a webpage with AJAX - no JQuery使用 AJAX 加载网页的一部分 - 没有 JQuery
【发布时间】:2011-09-07 11:50:49
【问题描述】:

我知道有一种 JQuery 方法可以做到这一点,但这不是我现在需要的。

我有以下将页面内容拉入 div 的 javascript,但是我不想要整个页面,只需要该页面中 DIV 的内容:

function ahah(url, target) {
document.getElementById(target).innerHTML ='<img src="ajax-loader.gif"/>';
 if (window.XMLHttpRequest) {
 req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
 req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req != undefined) {
req.onreadystatechange = function() {ahahDone(url, target);};
req.open("GET", url, true);
req.send("");
}
}  

function ahahDone(url, target) {
  if (req.readyState == 4) { // only if req is "loaded"
    if (req.status == 200) { // only if "OK"
      document.getElementById(target).innerHTML = req.responseText;
    } else {
      document.getElementById(target).innerHTML=" Error:\n"+ req.status + "\n" +req.statusText;
    }
  }
}

function load(name, div) {
ahah(name,div);
return false;
}

然后我这样称呼它:

<a href="page.php" onclick="load('page.php','ajaxcontent');return false;" class="slide_more">LOAD</a>

应该在哪里指定我想从 page.php 加载的选择器?

【问题讨论】:

  • 如果您只想要整个页面的一部分,那么该 DIV 不应该只是您从服务器返回的那个而不是发回整个页面吗?
  • 没错,这就是我在这里的原因,我不知道该怎么做。我不知道要在上面的代码中更改什么以仅获取 div 而不是整个页面。
  • page.php 是只需要返回 DIV 的那个。您的客户端 JavaScript 代码不会剪切页面并获取 DIV。通常不会那样做
  • 好的。然后我错了。我的假设基于 JQuery 加载,您不仅可以指定要加载的页面,还可以指定该页面上的选择器。你能给我举个例子吗?
  • 我已经在答案中添加了参考+解释

标签: ajax ahah


【解决方案1】:

通常在 AJAX 应用程序中,为了获取 HTML 片段,服务器会返回该片段,而不是在客户端选择它。例如,请参阅第 4 节中的 Simple Example。很酷的 AJAX 示例。下面提供了来自网站的代码供您参考:

<?php
function validate($name) {
  if($name == '') {
    return '';
  }

  if(strlen($name) < 3) {
    return "<span id=\"warn\">Username too short</span>\n";
  }

  switch($name) {
    case 'bob':
    case 'jim':
    case 'joe':
    case 'carol':
      return "<span id=\"warn\">Username already taken</span>\n";
  }

  return "<span id=\"notice\">Username ok!</span>\n";
}

echo validate(trim($_REQUEST['name']));
?>

请注意,PHP 页面仅返回一个包含 &lt;span&gt; 的 HTML 片段,而不是完整的 html。这是 AJAX 调用的好处之一,您不需要返回整个页面,从而节省了带宽成本,因为有效负载更小

【讨论】:

  • 好的。我现在明白了。我真的认为像 JQuery 这样的东西是用纯 javascript 加载的,你想要拉的部分是在客户端定义的。感谢您提供的示例,恐怕它对我不起作用:我想从我的 Wordpress 网站中提取信息,我想我不能只将一些 php 放入循环中。
  • 我可以想到可能的 jQuery 技巧,虽然我自己没有亲自尝试过,但它们可能会做你想做的事。如果你愿意,我可以尝试一个使用 jQuery 的快速示例,看看是否可行
  • 谢谢莫莫。实际上,我使用了 jQuery 加载,但切换到了 Javascript,因为实际触发 HTML 片段调用的链接位于已解析的 xml 文件中,并且在该文件中,带有头部中定义的 jQuery 调用的链接不起作用 - 只有旧的href onlick="" 好像没问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多