《javascript DOM编程艺术》里最后一章关于Ajax提交表单的异步效果

dlnrszk 2015-05-10 05:02:37
不知道有没有人实现过书里最后一章的Ajax部分的异步效果?我试了两次都没能成功,有谁实现过的麻烦告诉一下。能把那部分的代码直接贴一下的话就行:)或者你看一下我的(我用IE试了在request.open语句报错:拒绝访问),看代码部分是不是有什么问题。先谢过各位了:)


代码如下:
function getHTTPObject(){
if (typeof XMLHttpRequest == "undefined")
XMLHttpRequest = function(){
try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch(e){}
try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch(e){}
try{ return new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){}
return false;
}
return new XMLHttpRequest();
}
function displayAjaxLoading(element){
while (element.hasChildNodes()){
element.removeChild(element.lastChild);
}
var content = document.createElement("img");
content.setAttribute("src","images/loading.gif");
content.setAttribute("alt","加载中……");
element.appendChild(content);
}
function submitFormWithAjax(whichform,thetarget){
var request = getHTTPObject();
if (!request) return false;
displayAjaxLoading(thetarget);
var dataParts = [];
var element;
for(var i = 0;i<whichform.elements.length;i++){
element = whichform.elements[i];
dataParts[i] = element.name + '=' + encodeURIComponent(element.value);
}
var data = dataParts.join('&');
request.open('POST',whichform.getAttribute("action"), true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.onreadystatechange = function(){
if (request.readyState == 4){
if (request.status == 200 || request.status == 0){
var matches = request.responseText.match(/<article>([\s\S]+)<\/article>/);
if (matches.length > 0){
thetarget.innerHTML = matches[1];
}else{
thetarget.innerHTML = '<p>Oops,there was an error,Sorry.</p>';
}
}else{
thetarget.innerHTML = '<p>' + request.statusText + '</p>';
}
}
};
request.send(data);
return true;
};

function prepareForms(){
for (var i = 0;i<document.forms.length;i++){
var thisform = document.forms[i];
resetFields(thisform);
thisform.onsubmit = function(){
if (!validateForm(this)) return false;
var article = document.getElementsByTagName("article")[0];
if (submitFormWithAjax(this,article)) return false;
return true;
}
}
}

...全文
172 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlnrszk 2015-05-14
  • 打赏
  • 举报
回复
引用 5 楼 showbo 的回复:
乱码的话最好全部统一为utf-8编码,文件的存储编码也要为utf-8。gb2312文件内容存在中文会乱码
不知道是不是浏览器的问题,我把网页和脚本的编码都改为utf-8以后任然不行。可能是异步传输造成的编码错误吧,然后我找了更改异步传输中文乱码的解决方法,都没能解决。=。=非常感谢你的回复,分数给你了:)
Go 旅城通票 2015-05-12
  • 打赏
  • 举报
回复
乱码的话最好全部统一为utf-8编码,文件的存储编码也要为utf-8。gb2312文件内容存在中文会乱码
Go 旅城通票 2015-05-11
  • 打赏
  • 举报
回复
IE用XMLHttpRequest创建时要发布网站访问,直接拖进浏览器看不能请求本地文件 IE XMLHTTpRequest access is denied
dlnrszk 2015-05-11
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
[quote=引用 2 楼 dlnrszk 的回复:] 谢谢回复,我也搜索到这个问题了,都说Ajax不能跨域,要放到网站上才能访问。但是上面条件语句里不是已经设定了“request.status == 0”吗?这个不是本地FTP访问的返回值吗?那除了IE的话,我使用其他浏览器能看到异步效果吗?
IE本地测试要用acx创建没有,用XMLHttpRequest会报错。看连接里面的说明 本地测试用firefox,webkit核心的如chrome也不允许访问本地文件[/quote] 谢谢,我中午点开那个链接,以为是个广告链接……就迅速的关掉了= = ! 看明白了,更改后已经可以看到异步效果,但是似乎我传输的是中文所以显示了乱码,我去找找要更改哪里。再次感谢:)
Go 旅城通票 2015-05-11
  • 打赏
  • 举报
回复
引用 2 楼 dlnrszk 的回复:
谢谢回复,我也搜索到这个问题了,都说Ajax不能跨域,要放到网站上才能访问。但是上面条件语句里不是已经设定了“request.status == 0”吗?这个不是本地FTP访问的返回值吗?那除了IE的话,我使用其他浏览器能看到异步效果吗?
IE本地测试要用acx创建没有,用XMLHttpRequest会报错。看连接里面的说明 本地测试用firefox,webkit核心的如chrome也不允许访问本地文件
dlnrszk 2015-05-11
  • 打赏
  • 举报
回复
谢谢回复,我也搜索到这个问题了,都说Ajax不能跨域,要放到网站上才能访问。但是上面条件语句里不是已经设定了“request.status == 0”吗?这个不是本地FTP访问的返回值吗?那除了IE的话,我使用其他浏览器能看到异步效果吗?
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2015-05-10 05:02
社区公告
暂无公告