自动生成摘要(一):xmlHttp提交和接收数据
来源:互联网 发布:dota2 知乎 观赏性 编辑:程序博客网 时间:2024/06/04 18:49
自动生成摘要(一):xmlHttp提交和接收数据
在这个系列的文章里,将要探讨一下,在新闻(文章)发布系统里面,用户发布新闻时,自动生成摘要的相关功能。首先,要研究的是xmlHttp提交和接收数据,然后再逐步丰富程序的功能。
任务目标:
1、A页面将表单中的数据(textarea)通过xmlHttp提交到另外一个程序B页面,并且由B接收,生成摘要再返回A。
2、将A页面中的在线html编辑器(Ifram)中的数据,提交到B页面,B接收,B过滤掉数据中的HTML标签(标记),生成摘要,将数据返回A。
这篇文章(仅指系列文章中的一),主要有以下几个部分:
一、A页面和B页面的主要内容。
二、A页面xmlHttp提交数据。
三、B页面接收和处理数据。
四、A页面处理xmlHttp返回结果。
五、在调试过程当中出现的错误和处理。
一、A页面和B页面的主要内容。
1、A页面的主要内容:
1.1 多行文本框(textarea)n_content,用来存放新闻的内容。因为现在是最简单的功能调试,所以本文章里是把这里面的数据提交到B页面。
1.2 浮动框架(ifram)、编辑器Editor1,用来编辑新闻的内容。当form提交的时候,Ifram自动把内容放入n_content。可以使用Editor1.getHTML()来取得里面的内容。(这个在后面的文章将会用到。)
1.3 多行文本框(textarea) n_summary,用来存放新闻的摘要。
1.4 ID为SummaryResult的span,用来提示一些信息。
1.5 按钮send,用来触发事件,提交数据。这是个botton,并不是将整个表单的内容提交到数据库,而只把新闻的内容提交到B页面。
1.6 一段JavaScipt代码,用来完成相关的功能。
1.7 A页面源代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>TEST</title>
<script language="JavaScript" type="text/javascript">...
<!--
var xmlHttp = false;
try ...{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) ...{
try ...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) ...{
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') ...{
xmlHttp = new XMLHttpRequest();
}
function ajaxChk()
...{
var n_content = document.getElementById("n_content").value;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML('<?xml version="1.0"?><root/>');
var content = xmlDoc.createElement("content");
content.text = n_content
xmlDoc.documentElement.appendChild(content);
alert(n_content);
var url = "Mk_summary.asp"
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(xmlDoc);
}
function updatePage()...{
if(xmlHttp.readyState < 4 )...{
SummaryResult.innerHTML = "正在生成.....";
}
if( xmlHttp.readyState == 4 )...{
if(xmlHttp.status == 200 )...{
try
...{
var response = xmlHttp.responseText;
}catch(exception)...{
if (exception.description.indexOf("-1072896748")>0)
...{
var response = "";
}
}
SummaryResult.innerHTML=response;
}else...{
alert("对不起,出现错误:无法从服务器取得验证消费结果。");
}
}
}
-->
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<p>
<textarea name="n_content" cols="40" rows="6" id="n_content"></textarea>
</p>
<iframe id="eWebEditor1" src="editor/ewebeditor.htm?id=content1&style=user" frameborder="0" scrolling="No" width="550" height="350"></iframe>
<p><br />
</p>
<p>
<textarea name="n_summary" cols="50" rows="6" id="n_summary"></textarea>
<span id="SummaryResult"></span>
</p>
<p>
<input type="button" name="send" value="生成摘要" onclick="JavaScript:ajaxChk();" />
(自动获取)<br />
</p>
</form>
</body>
</html>
2、B页面源代码
<%' Response.CodePage=65001%>
<%
Response.ContentType="text/xml"
Response.Charset="UTF-8"
Dim xmlDom
dim content
dim fff,ggg
Set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
xmlDom.async = True
xmlDom.load(Request)
If xmlDom.parseError.errorCode<>0 Then
Response.Write("未知的错误!")
Else
If xmlDom.readyState=4 Then
Set content = xmlDom.documentElement.selectNodes("/root/content")
For Each em In content
Response.Write(content(i).text)
Next
Set fff = xmlDom.getElementsByTagName("content")
Response.Write(fff.item(0).text)
set ggg = xmlDom.documentElement.selectSingleNode("content")
Response.Write(ggg.text)
'Response.Write(ggg.InnerText)
'Response.Write(xmlDom.xml)
Response.Write("数据接收成功!")
End If
End If
%>
二、A页面提交数据
1、使用xmlHttp,这部分使用网络上标准的用法,所以只列出代码。
try ...{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) ...{
try ...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) ...{
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') ...{
xmlHttp = new XMLHttpRequest();
}
2、使用xmlHttp向B文件(我这里用的文件名是Mk_summary.asp)传送数据。
传送数据的方式有两种,分别是GET和POST,其中GET就是通过URL中的&abc=123这种方式传送数据,其最大限制为1024字节。所以这里必须采用POST方式传送。因为传送的是xml对象,所以这里又涉及xml的生成和解析等问题。所以在这一部分的任务就有三个:取得表单的内容,然后装入xml,使用xmlHttp发送。
下面是代码,在相应的注释里说明了功能。
...{
var n_content = document.getElementById("n_content").value;
//取得了表单n_content的内容。也可以用document.form1.n_content.value
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//创建xml对象,注意这里是xml和xmlHttp是不一样的,xmlHttp是用来传送数据和消息的,xml是用来存放数据的。
xmlDoc.loadXML('<?xml version="1.0"?><root/>');
//刚才创建的xml对象是空的,不能使用;现在向里面装入一个最简单的xml文档,就可以使用了。
var content = xmlDoc.createElement("content");
content.text = n_content
//上面这两行是创建一个Element,然后把内容放入这个Element。
xmlDoc.documentElement.appendChild(content);
//将前面创建的Element加入到xml里面。
var url = "Mk_summary.asp"
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(xmlDoc);
//发送数据
}
三、B页面接收和处理数据。
1、设置好B页面的编码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Response.ContentType="text/xml"
Response.Charset="UTF-8"
可以参考下面这篇文章。
http://blog.csdn.net/xpnew/archive/2007/02/04/1502053.aspx
2、创建XMLDOM对象以获取数据。
Set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
xmlDom.async = True
xmlDom.load(Request)
3、取得数据,并且处理数据。
因为这里只是程序的框架和雏形,所以处理得很简单。
'如果出现错误,那么就返回一个提示。
Response.Write("未知的错误!")
Else
If xmlDom.readyState=4 Then
'当接收完毕开始处理
Set content = xmlDom.documentElement.selectNodes("/root/content")
'第一种方式通过path获得一个数组,仅管在本例当中只有一个。
For Each em In content
Response.Write(content(i).text)
Next
Set fff = xmlDom.getElementsByTagName("content")
'第二种方式,通过标签名称获取。
Response.Write(fff.item(0).text)
set ggg = xmlDom.documentElement.selectSingleNode("content")
'第三种方式,获取单个Node
Response.Write(ggg.text)
'Response.Write(xmlDom.xml)
'这一行被我注释掉了,也可以把所获得的xml全部返回给A页面。
Response.Write("数据接收成功!")
End If
End If
四、A页面处理xmlHttp返回结果。
if(xmlHttp.readyState < 4 )...{
SummaryResult.innerHTML = "正在生成.....";
}
if( xmlHttp.readyState == 4 )...{
if(xmlHttp.status == 200 )...{
try
...{'这里尝试捕捉一个错误,编码方面的错误。
var response = xmlHttp.responseText;
}catch(exception){
if (exception.description.indexOf("-1072896748")>0)
{
var response = "";
}
}
SummaryResult.innerHTML=response;
}else{
alert("对不起,出现错误:无法从服务器取得验证消费结果。");
}
}
}
在调试过程当中出现的错误和处理。
1、最痛恨的录入错误!
接收文件B上定义的接收对象是xmlDom,到了后来打成了xmlDoc,其实Dom Doc都是常用的名称。所以检查数遍都没发现,偏偏还偷懒,没有开Option Explicit,瞎忙活了半个下午和半个上午,多半天时间痛苦煎熬中,活该!
2、处理xml的过程中,第一种方法,返回的content是个数组,如果这样使用Response.Write(content.text)就会出错。
第二种方法,也差不多。第三种方法,如果忽略了documentElement也是不行的。唉,因为好久没有搞xml这个地方,好多东西都忘记了,这回就算是复习一下吧。
3、编码的问题。B文件必须是utf-8编码,A文件最好也是utf-8编码。
4、在B文件中Response.BinaryWrite输出,这个输出,如果A文件采用var response = xmlHttp.responseText肯定会出错。
说明:
1、我作东西喜欢,先在几个简单的页面上把核心的功能测试通过之后再合并的完整的项目当中去。并且要先调试一部分最简单的,然后再逐步丰富程序的功能。
2、这篇文章也可以说是工作总结,所以其中涉及到的一些内容可能正是你感兴趣的,但是我却没有展开说,只能抱歉。
3、这里涉及到的一个问题,编码解码我在以前的博文中讨论过,这里不详细说明。
4、这里涉及到的一个问题,过滤HTML标签,是我以前搞过的关于正则表达式方面的问题,因为时间很长,所以现在不能详细介绍,只给列出相关代码。哪天再碰到正则式方面的问题,我再讨论。
5、这是公司正在进行中的若干项目中的一个,如果公司的工作任务变化,现在的这个项目暂停,有可能我无法将这个系列文章连续整理出来。
6、因为这只是前期的准备工作,所以A、B文件的页面结构、源代码什么的很不规范,只求速度。
- 自动生成摘要(一):xmlHttp提交和接收数据
- 如果利用XMLHTTP.SEND提交并利用ASP在后台接收所提交数据
- 如果利用XMLHTTP.SEND提交并利用ASP在后台接收所提交数据
- 如何利用XMLHTTP.SEND提交并在后台接收所提交数据
- 自动生成摘要(二):丰富和完善功能
- Asp.net XMLHTTP 基类 (GET,Post发送和接收数据)
- Asp.net XMLHTTP 基类 (GET,Post发送和接收数据)
- 学习使用AutoMake1.9的自动生成工程文件(一)——网络文章摘要
- DedeCms采集没有自动生成摘要和关键字的解决办法
- DedeCms采集没有自动生成摘要和关键字的解决办法
- 用XMLHTTP和WEB资源交换数据(一)(kagad-原创)
- 如何自动生成文本摘要
- zico源代码分析(一) 数据接收和存储部分
- 接收和提交COOKIE
- MVC中form提交和在控制器中接收数据
- jsp之同一个页面提交和接收数据
- XMLHTTP无刷新自动实时更新数据
- XMLHTTP无刷新自动实时更新数据
- COM调用的一个问题
- Oracle数据库开发(七).OCI开发示例说明
- Tomcat 使用心得
- 现在社会的生存 打工在慢慢被淘汰
- JSF入门
- 自动生成摘要(一):xmlHttp提交和接收数据
- Web 2.0媒体关注十大品牌
- Word中用换行符替换分段符的宏
- XEN on OpenSolaris (2) - 创建DomU硬盘镜像
- 常用正则表达式
- 中国人最易犯错的30句英语
- 获取和更改窗体信息
- 一个好的代码自动生成工具
- 盛大获《死或生Online》中国运营授权