zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

aspajax跨域提交数据

数据跨域 提交
2023-06-13 09:14:07 时间
星期五写了个分类信息的小东东!在数据库里只有ip地址,一般访客不太清楚IP地址来源于哪个城市.如果在表里多一个列保存城市又没有真实性可言.如果能把IP地址变成城市多好呀.当然可以去down下数据库.可就为这个需求觉得有点浪费.还好了有好多网站提供查询.如果能把它的结果变成我的.问题解决.
需要一个js函数.当每出来一条记录时,就把ip替换为城市:
复制代码代码如下:

<scripttype="text/javascript">
functionqueryAddress(strID){
try{
varqIp=document.getElementById("ip_"+strID);
varqUrl="http://ip.wanvee.cn/GetIp.ashx?ipstr="+qIp.firstChild.nodeValue;
varajax=newAjax.Request(qUrl,{
method:"get",
onSuccess:function(strResponse){
varresContent=strResponse.responseText;
varstrStruct=resContent.substring(resContent.lastIndexOf(",")+1,resContent.length);
qIp.innerHTML=strStruct.split("")[0];
}
});
}catch(e){}
}
</script>

写一个测试用例:
<spanid="ip_2">221.123.123.123</span><scripttype="text/javascript">queryAddress("2")</script>
<spanid="ip_3">221.123.123.123</span><scripttype="text/javascript">queryAddress("3")</script>
<spanid="ip_4">221.123.123.123</span><scripttype="text/javascript">queryAddress("4")</script>
罗列一下我找的几个查询网址:
http://www.ip.cn/getip.php?action=queryip&ip_url=221.123.123.123
http://ip.wanvee.cn/GetIp.ashx?ipstr=221.123.123.123
以上两个只返回文本
http://www.youdao.com/smartresult-xml/search.s?type=ip&q=221.123.123.123
这个返回XML
写完了,意识到一个问题.ajax不支持跨域提交.这也不成问题:我们用脚本写一个页面.用msxml的load方法装载目标网址!就可以搞到我们感兴趣的数据!参考此贴:http://topic.csdn.net/t/20030619/12/1933920.html
js代码稍微变一下:
复制代码代码如下:

functionqueryAddress(strID){
try{
varqIp=document.getElementById("ip_"+strID);
varqUrl="queryiplocal.asp?ip="+qIp.firstChild.nodeValue;
varajax=newAjax.Request(qUrl,{
method:"get",
onSuccess:function(strResponse){
qIp.innerHTML=strResponse.responseText;
}
});
}catch(e){}
}

下面的是ASP文件源码:
复制代码代码如下:
<%
Response.ContentType="text/xml"
Response.Charset="GB2312"
DimstrIP,strPattern
strIP=Request.QueryString("ip")
strPattern="^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"
IfstrIP=""OrIsNumeric(strIP)then
Response.End()
ElseIfNotserRegValidate(strPattern,strIP)then
Response.End()
EndIf
DimstrURL:strURL="http://www.youdao.com/smartresult-xml/search.s?type=ip&q="
setparser=Server.CreateObject("MSXML2.DOMDocument")
parser.async=false
parser.ValidateOnParse=true
parser.setProperty"ServerHTTPRequest",true
parser.load(strURL)
ifparser.parseError.errorCode<>0then
Response.End()
endif
setcurrNode=parser.selectNodes("//product")
DimstrLocal:strLocal=currNode.item(0).selectSingleNode("location").text
Response.WriteSplit(strLocal,"")(0)
%>