在服务器端 用 xmlhttp 请求
解决方案 »
- $(document).ready qtip后 如何在后面动态改变呢?
- 求助在线等,请大侠们帮帮忙,在ff上运行正常,ie上不行
- 请教。。。如何在canvas里面动态画线?
- html页面能够写jquery的ajax方法吗
- div漂浮的javascript代码为什么在火狐下无效
- 页面展示采用什么框架
- 关于 setTimeout 方法的疑问,请赐教,谢谢!(JavaScript)
- 如何让一个下拉框中的数据在另一个文本框中出现?
- 请教关于html对象的事件
- 如果在登陆的时候不让浏览器将登陆名和口令记下来
- JS的正则表达式
- select中,关于if(event.keyCode==13)event.keyCode=9的问题,帮助看看......
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<%
dim aa
Set objXMLHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP") '创建xmlhttp对象
'set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP") '这个方法稍微古老一点
objXmlHttp.open "GET","http://www.alibaba.com.cn",false '用类似于http协议中的get方法打开yahoo国际站
objXmlHttp.send() '发送了一个http请求
aa = BytesToBstr(objXmlHttp.responseBody) '输出返回的文本
response.write (aa)
Set obiXMLHTTP=nothing '注销object
Function BytesToBstr(body)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = "GB2312"
'转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP调用有中文字符的网页得到的将是乱码
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function%>
</body>
</html>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="zourinet">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT=""></HEAD><BODY>
<form method="post" action="">
<div></div>
</form>
</BODY>
</HTML>
<script language="JavaScript">
/* <![CDATA[ */
//用于获取相应地址档
function GetXMLContent(urlstr)
{
var http_request;
urlstr.indexOf("?")==-1?urlstr=urlstr+"?"+Math.random():urlstr=urlstr+"&"+Math.random()
if (window.XMLHttpRequest){ // Mozilla, Safari, ...
http_request = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
http_request.open("GET",urlstr,false);
http_request.send(null);
return http_request.responseText;
}
document.body.innerHTML = GetXMLContent("http://www.csdn.net");
/* ]]> */
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>未命名頁面</title>
<script type="text/javascript">
<!--
var xmlhttp;
function createHTTP()
{
if (window.ActiveXObject) //如果是IE
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) //如果是Mozilla,Safari,...
{
xmlhttp = new XMLHttpRequest();
}
}
function GetData()
{
createHTTP();
xmlhttp.onreadystatechange = StateChange;
xmlhttp.open("GET", "http://www.csdn.net", false);
xmlhttp.send();
}
function StateChange()
{
if (xmlhttp.readystate == 4)
{
if (xmlhttp.status == 200)
{
document.write(xmlhttp.responseText); //xmlhttp.responseText即為想獲取的網頁的全部html代碼
}
}
}
//-->
</script>
</head>
<body onload="GetData()">
<form id="form1">
<input type="text" id="txtTest" />
</form>
</body>
</html>5樓的已經回答了,不過還是把自己試驗的結果發出來
不過如果樓主啟動了"網頁的指令碼偵錯"會提示"必須要有物件",這個是因為我們沒有下載網頁使用的外部javascript檔案
---------------------------------------------------------------
谁说的?XMLHTTP是可以跨域获取数据的~
还有楼主根本9不搭8~我都说了XMLHTTP可以做到的~~是客户端实现的!!!!下面是我以前做过的代码~本地获取google new搜索结果的页面~
你把google new当作你的bbb.com~~看看是不是能实现!!!请输入搜索关键字:<input id="q" />
<input type="button" onclick="action()" value="获取" />
<div id="loading"></div><br />
<div id="show"></div>
<script type="text/javascript">
/* 拼接搜索网址 */
function action(){
var urlTemp="http://news.google.cn/news?hl=zh-CN&tab=wn&ned=ccn&q={0}&ie=UTF-8&output=rss";
var url=urlTemp.replace("{0}",encodeURI(document.getElementById("q").value));
document.getElementById("loading").innerHTML="loading...";
getDoc(url,show);
}/* 参数:要获取的文件的网址,回调函数*/
function getDoc(url,fun){
var xmlhttp;
try{
xmlhttp=new XMLHttpRequest();
}catch(e){
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
fun(xmlhttp.responseXML);
}
}
}
xmlhttp.open("get",url,true);
window.startGetFileTime=new Date();
xmlhttp.send();
}/* 解析文档 */
function show(xml){
window.endGetFileTime=new Date();
document.getElementById("loading").innerHTML="已获取,正在分析...";
window.startAnalysisTime=new Date();
var textDoc=xml;
var xslDoc=document.getElementById("xsl").XMLDocument;
document.getElementById("show").innerHTML=textDoc.transformNode(xslDoc);
window.endAnalysisTime=new Date();
var mess=[];
mess.push("完成,下载文件耗时:");
mess.push(window.endGetFileTime-window.startGetFileTime);
mess.push("毫秒,解析文件耗时:");
mess.push(window.endAnalysisTime-window.startAnalysisTime);
mess.push("毫秒");
document.getElementById("loading").innerHTML=mess.join("");
}
</script>
<xml id="xsl">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:apply-templates select="rss/channel" />
</xsl:template>
<xsl:template match="rss/channel">
<xsl:for-each select="./item" >
<p>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="./link" />
</xsl:attribute>
<xsl:attribute name="target">
_new
</xsl:attribute>
<xsl:value-of select="./title" />
</xsl:element>
<xsl:value-of select="./pubDate" />
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
</xml>
把你的代码放到Web server里,看一下。
别人不会点保存网页再打开的。
你可以看一下http://a.tominfo9.com/a.htm 我打开页面,输入任意网址。依旧提示没有权限的。
http://topic.csdn.net/t/20060726/16/4906734.html
为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:
1、发送HttpRequest请求。
2、接收HttpResponse返回的结果。得到特定页面的html源文件。
3、取出包含数据的那一部分源码。
4、根据html源码生成HtmlDocument,循环取出数据。
5、写入数据库。
程序如下:
C# code//根据Url地址得到网页的html源码
private string GetWebContent(string Url)
{
string strResult="";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("GB2312");
StreamReader streamReader = new StreamReader(streamReceive, encoding);
strResult = streamReader.ReadToEnd();
}
catch
{
MessageBox.Show("出错");
}
return strResult;
}
为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用
using System.Net;以下是程序具体实现过程:
private void button1_Click(object sender, EventArgs e)
{
//要抓取的URL地址
string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2"; //得到指定Url的源码
string strWebContent = GetWebContent(Url); richTextBox1.Text = strWebContent;
//取出和数据有关的那段源码
int iBodyStart = strWebContent.IndexOf("<body", 0);
int iStart = strWebContent.IndexOf("歌曲TOP500", iBodyStart);
int iTableStart = strWebContent.IndexOf("<table", iStart);
int iTableEnd = strWebContent.IndexOf("</table>", iTableStart);
string strWeb = strWebContent.Substring(iTableStart, iTableEnd - iTableStart + 8); //生成HtmlDocument
WebBrowser webb = new WebBrowser();
webb.Navigate("about:blank");
HtmlDocument htmldoc = webb.Document.OpenNew(true);
htmldoc.Write(strWeb);
HtmlElementCollection htmlTR = htmldoc.GetElementsByTagName("TR");
foreach (HtmlElement tr in htmlTR)
{
string strID = tr.GetElementsByTagName("TD")[0].InnerText;
string strName = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "MusicName");
string strSinger = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "Singer");
strID = strID.Replace(".", "");
//插入DataTable
AddLine(strID, strName, strSinger,"0"); string strID1 = tr.GetElementsByTagName("TD")[2].InnerText;
string strName1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "MusicName");
string strSinger1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "Singer");
//插入DataTable
strID1 = strID1.Replace(".", "");
AddLine(strID1, strName1, strSinger1,"0"); string strID2 = tr.GetElementsByTagName("TD")[4].InnerText;
string strName2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "MusicName");
string strSinger2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "Singer");
//插入DataTable
strID2 = strID2.Replace(".", "");
AddLine(strID2, strName2, strSinger2,"0"); }
//插入数据库
InsertData(dt);
dataGridView1.DataSource = dt.DefaultView;
}
参考一下这里看有没有帮助:http://www.f-dev.com/28
-------------------------------
取得到就厉害了~~~
不知道ajax不能跨域?
(to 15楼,本地调试是可以跨域,请你放www.xxx.com服务器上试试,)
请楼主自己搜索 ajax 跨域
用C#中的webClient和webRequest可以解决.
在C#2.0中用htmlDocument对像来解析里面的内容
做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。Ajax的跨域访问问题是现有的Ajax开发人员比较常遇到的问题。 IE对于跨域访问的处理是,弹出警告框,提醒用户。如果用户将该网站纳入可信任网站,或者调低安全级别,那么这个问题IE就不会在提醒你。 FireFox等其它非微软的浏览器遇到跨域访问,则解决方案统一是拒绝访问。 有人说,IE是主流浏览器,只要它能正常使用就好了。此言差已,IE虽然能够处理,但是是有前提的,要么用户不厌其烦地在页面弹出警告框之后点击是(点击否就不执行该Ajax调用了),要么用户将该网站纳入可信任站点。这两种做法,在企业管理系统的应用中倒是比较常见,因为系统管理员可以以行政手段保证用户的行为。但是对于互联网上的网站或者门户开发,这种做法则不行。 最近遇到了这个问题,需要在跨域访问结束之后完成使主窗口出现一些特效,搜索了一些资料,通过不断尝试以及在不同浏览器中进行兼容性测试,找到了几个可行的方案: 1、Web代理的方式。即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。 2、on-Demand方式。MYMSN的门户就用的这种方式,不过MYMSN中不涉及跨域访问问题。动态控制script标记的生成,通过修改script标记的src属性完成对跨域页面的调用。此方案存在的缺陷是,script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。不过此方案非常适合聚合类门户使用。 3、iframe方式。查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到自己已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确可以了,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种交互被拒绝),因此无法完成对父窗口效果的影响。 4、用户本地转储方式:IE本身依附于windows平台的特性为我们提供了一种基于iframe,利用内存来“绕行”的方案,即两个window之间可以在客户端通过windows剪贴板的方式进行数据传输,只需要在接受数据的一方设置Interval进行轮询,获得结果后清除Interval即可。FF的平台独立性决定了它不支持剪贴板这种方式,而以往版本的FF中存在的插件漏洞又被fixed了,所以FF无法通过内存来完成暗渡陈仓。而由于文件操作FF也没有提供支持(无法通过Cookie跨域完成数据传递),致使这种技巧性的方式只能在IE中使用。 5、我自己用于解决这类问题的方式:结合了前面几种方式,在访问A网站时,先请求B网站完成数据处理,再根据返回的标识来获得所需的结果。这种方法的缺点也很明显,B网站的负载增大了。优点,对session也实现了保持,同时A网站与B网站页面间的交互能力增强了。最重要的一点,这种方案满足了我的全部需要。 总结一下,以上方案中可选择的情况下,我最推荐on-Demand方式,在不需要提交大量数据的情况下,这种方式能够解决您的大部分问题。
参考资料:http://www.newbooks.com.cn/info/37166.html
不过只能在ie下实现。
firefox不行。
ie的xmlhttp是可以跨域的,存在着安全漏洞
firefox下是不可以跨域的。