使用AJAX加载网页的一部分 - 没有JQuery

时间:2011-09-07 11:50:49

标签: ajax ahah

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

我有以下javascript将页面内容拉入div,但我不想要整个页面,只需要来自该页面的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加载的选择器?

1 个答案:

答案 0 :(得分:2)

通常在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页面只返回一个仅包含<span>的HTML片段,而不是完整的html。这是AJAX调用的一个好处,您无需返回整页,从而节省带宽成本,因为有效负载较小