我正在研究一本书中的Ajax示例,本书中的示例不起作用,我在IE 8和FireFox中尝试过。 asyncRequest.status返回“未指定的错误”。我只是在Ajax中闲逛,这里有什么问题?谢谢。
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
.box { border: 1px solid black;
padding: 10px }
</style>
<title>Switch Content Asynchronously</title>
<script type = "text/javascript" language = "JavaScript">
var asyncRequest; // variable to hold XMLHttpRequest object
// set up and send the asynchronous request.
function getContent( url )
{
// attempt to create the XMLHttpRequest and make the request
try
{
asyncRequest = new XMLHttpRequest(); // create request object
// register event handler
asyncRequest.onreadystatechange = stateChange;
asyncRequest.open( 'GET', url, true ); // prepare the request
asyncRequest.send( null ); // send the request
} // end try
catch ( exception )
{
alert( 'Request failed.' );
} // end catch
} // end function getContent
// displays the response data on the page
function stateChange()
{
if ( asyncRequest.readyState == 4 && asyncRequest.status == 200 )
{
document.getElementById( 'contentArea' ).innerHTML =
asyncRequest.responseText; // places text in contentArea
} // end if
} // end function stateChange
// clear the content of the box
function clearContent()
{
document.getElementById( 'contentArea' ).innerHTML = '';
} // end function clearContent
</script>
</head>
<body>
<h1>Mouse over a book for more information.</h1>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/cpphtp6.jpg"
onmouseover = 'getContent( "cpphtp6.html" )'
onmouseout = 'clearContent()'/>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/iw3htp4.jpg"
onmouseover = 'getContent( "iw3htp4.html" )'
onmouseout = 'clearContent()'/>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/jhtp7.jpg"
onmouseover = 'getContent( "jhtp7.html" )'
onmouseout = 'clearContent()'/>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/vbhtp3.jpg"
onmouseover = 'getContent( "vbhtp3.html" )'
onmouseout = 'clearContent()'/>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/vcsharphtp2.jpg"
onmouseover = 'getContent( "vcsharphtp2.html" )'
onmouseout = 'clearContent()'/>
<img src =
"http://test.deitel.com/examples/iw3htp4/ajax/thumbs/chtp5.jpg"
onmouseover = 'getContent( "chtp5.html" )'
onmouseout = 'clearContent()'/>
<div class = "box" id = "contentArea"> </div>
</body>
</html>
更新:我在原帖中没有提到我在本地计算机上运行此示例。出于安全原因(我相信,如果我错了请纠正我),Ajax不能在本地方框上工作,除非它以某种方式通过域引用。我将脚本上传到服务器,它工作得很好。
答案 0 :(得分:4)
在readyState = 4(完成)之前,IE中不存在请求状态,因此您的检查应该是两次检查。 。 。试试这样。 。 。
if (req.readyState == 4){
// req is complete (200 for web servers, 0 for local files in IE)
if ((req.status == 200)||(req.status == 0)){
// good
} else{
// error
}
}
另外,Firefox永远不会为文件//协议返回4的readyState,但是如果readyState不是4,则尝试访问状态的6个错误。 。 。 。仍在我的一个页面中解决一些需要在websever和ie6中的本地文件(文件协议)工作的问题,即8,和firefox
答案 1 :(得分:2)
看起来你的服务器要么不喜欢这个请求,要么就是你对这些html文件的权限。调试方法:
asyncRequest.send可能无法获取空值。我试着传递一个空字符串:“”
确保您可以在不使用ajax的情况下在浏览器中点击这些html文件。如果你不能,那么你将不得不弄清楚这些文件权限发生了什么。
在firefox中,安装Firebug并使用它来使用断点调试代码,以便您可以准确地看到它发生的位置。
仅供参考,您的代码与ie6不兼容。需要检查ActiveXObject,但如果你不关心ie6你已经设置了。