在.NET中结合AJAX调用Yahoo! Search Web Services

本文采用Ajax访问Yahoo!的Web服务,实现效果与<<Ajax基础教程>>中的4.8一样,但书中是用JAVA写的服务器代码,这里我用.NET重写,客户端代码如下:

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
    
< title > Yahoo! Search Web Services </ title >

    
< script  type ="text/javascript" >
var xmlHttp;

function createXMLHttpRequest() {
    
if (window.ActiveXObject) {
        xmlHttp 
= new ActiveXObject("Microsoft.XMLHTTP");
    }
 
    
else if (window.XMLHttpRequest) {
        xmlHttp 
= new XMLHttpRequest();
    }

}

    
function doSearch() {
    
var url = "YahooSearchGateway.aspx?" + createQueryString() + "&ts=" + new Date().getTime();
    createXMLHttpRequest();
    xmlHttp.onreadystatechange 
= handleStateChange;
    xmlHttp.open(
"GET", url, true);
    xmlHttp.send(
null);
}


function createQueryString() {
    
var searchString = document.getElementById("searchString").value;
    searchString 
= escape(searchString);
    
    
var maxResultsCount = document.getElementById("maxResultCount").value;

    
var queryString = "query=" + searchString + "&results=" + maxResultsCount;
    
return queryString;
}

    
function handleStateChange() {
    
if(xmlHttp.readyState == 4{
        
if(xmlHttp.status == 200{
            parseSearchResults();
        }

        
else {
            alert(
"Error accessing Yahoo! search");
        }

    }

}


function parseSearchResults() {
    
var resultsDiv = document.getElementById("results");
    
while(resultsDiv.childNodes.length > 0{
        resultsDiv.removeChild(resultsDiv.childNodes[
0]);
    }

    
    
var allResults = xmlHttp.responseXML.getElementsByTagName("Result");
    
var result = null;
    
for(var i = 0; i < allResults.length; i++{
        result 
= allResults[i];
        parseResult(result);
    }

}


function parseResult(result) {
    
var resultDiv = document.createElement("div");
    
    
var title = document.createElement("h3");
    title.appendChild(document.createTextNode(getChildElementText(result, 
"Title")));
    resultDiv.appendChild(title);
    
    
var summary = document.createTextNode(getChildElementText(result, "Summary"));
    resultDiv.appendChild(summary);
    
    resultDiv.appendChild(document.createElement(
"br"));
    
var clickHere = document.createElement("a");
    clickHere.setAttribute(
"href", getChildElementText(result, "ClickUrl"));
    clickHere.appendChild(document.createTextNode(getChildElementText(result, 
"Url")));
    resultDiv.appendChild(clickHere);
    
    document.getElementById(
"results").appendChild(resultDiv);
}


function getChildElementText(parentNode, childTagName) {
    
var childTag = parentNode.getElementsByTagName(childTagName);
    
return childTag[0].firstChild.nodeValue;
}

    
</ script >

</ head >
< body >
    
< h1 >
        Web Search Using Yahoo! Search Web Services
</ h1 >
    
< form  action ="#" >
        Search String:
        
< input  type ="text"  id ="searchString"   />
        
< br  />
        
< br  />
        Max Number of Results:
        
< select  id ="maxResultCount" >
            
< option  value ="1" > 1 </ option >
            
< option  value ="10" > 10 </ option >
            
< option  value ="25" > 25 </ option >
            
< option  value ="50" > 50 </ option >
        
</ select >
        
< br  />
        
< br  />
        
< input  type ="button"  value ="Submit"  onclick ="doSearch();"   />
    
</ form >
    
< h2 >
        Results:
</ h2 >
    
< div  id ="results"   />
</ body >
</ html >

 在按下Submit按钮时,客户端调用doSearch()函数,构造QueryString查询字符串,生成XmlHttpRequest,并设callback函数,open后,send,其中query和results参数都是yahoo! search web services内设的参数,此时向服务器端发出异步调用,下面先看看服务器端的代码:

protected   void  Page_Load( object  sender, EventArgs e)
    
{
        
string url = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=your_app_id&type=all&"+this.Request.Url.Query.Substring(1);
        HttpWebRequest hwr 
= WebRequest.Create(url) as HttpWebRequest;
        
using (HttpWebResponse response = hwr.GetResponse() as HttpWebResponse)
        
{
            StreamReader sr 
= new StreamReader(response.GetResponseStream());
            
this.Response.ContentType = "text/xml";
            
this.Response.Write(sr.ReadToEnd());
            
this.Response.Flush();
            
this.Response.Close();
        }

    }

通过WebRequest.Create创建请求,再GetResponse,通过GetResponseStream获得响应的内容,再用this.Response.Write方法写入流中,最后刷新,关闭,还要记得设置ContentType,让响应以xml方式发出,在客户端会得到一个xml document,用xmlHttp.responseXML可以获得。

这个xml document中有title,summary,url,clickurl等tag,用相应的javascript dom可以获得,最后就是一些显示处理问题了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值