星期五寫了個分類資訊的小東東!在資料庫裡只有ip地址,一般訪客不太清楚IP地址來源於哪個城市.如果在表裡多一個列儲存城市又沒有真實性可言.如果能把IP地址變成城市多好呀.當然可以去down下資料庫.可就為這個需求覺得有點浪費.還好了有好多網站提供查詢.如果能把它的結果變成我的.問題解決.
需要一個js函數.當每出來一條記錄時,就把ip替換為城市:
- <script type="text/javascript">
- function queryAddress(strID){
- try{
- var qIp=document.getElementById("ip_"+strID);
- var qUrl='http://ip.wanvee.cn/GetIp.ashx?ipstr='+qIp.firstChild.nodeValue;
- var ajax=new Ajax.Request(qUrl,{
- method:'get',
- onSuccess:function(strResponse){
- var resContent=strResponse.responseText;
- var strStruct=resContent.substring(resContent.lastIndexOf(",")+1,resContent.length);
- qIp.innerHTML=strStruct.split(" ")[0];
- }
- });
- }catch(e){}
- }
- </script>
寫一個測試案例:
<span id="ip_2">221.123.123.123</span><script type="text/javascript">queryAddress('2')</script>
<span id="ip_3">221.123.123.123</span><script type="text/javascript">queryAddress('3')</script>
<span id="ip_4">221.123.123.123</span><script type="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代碼稍微變一下:
- function queryAddress(strID){
- try{
- var qIp=document.getElementById("ip_"+strID);
- var qUrl='queryiplocal.asp?ip='+qIp.firstChild.nodeValue;
- var ajax=new Ajax.Request(qUrl,{
- method:'get',
- onSuccess:function(strResponse){
- qIp.innerHTML=strResponse.responseText;
- }
- });
- }catch(e){}
- }
下面的是ASP檔案源碼:
- <%
- Response.ContentType="text/xml"
- Response.Charset="GB2312"
- Dim strIP,strPattern
- strIP=Request.QueryString("ip")
- strPattern="^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"
- If strIP="" Or IsNumeric(strIP) then
- Response.End()
- ElseIf Not serRegValidate(strPattern,strIP) then
- Response.End()
- End If
- Dim strURL:strURL="http://www.youdao.com/smartresult-xml/search.s?type=ip&q="
- set parser=Server.CreateObject("MSXML2.DOMDocument")
- parser.async=false
- parser.ValidateOnParse=true
- parser.setProperty "ServerHTTPRequest",true
- parser.load(strURL)
- if parser.parseError.errorCode<>0 then
- Response.End()
- end if
- set currNode=parser.selectNodes("//product")
- Dim strLocal:strLocal=currNode.item(0).selectSingleNode("location").text
- Response.Write Split(strLocal," ")(0)
- %>