以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 HTML/XHTML/Ajax/Web 2.0/Web 3.0 』  (http://bbs.xml.org.cn/list.asp?boardid=22)
----  javascript的问题,帮忙看看  (http://bbs.xml.org.cn/dispbbs.asp?boardid=22&rootid=&id=58376)


--  作者:娜娜
--  发布时间:1/23/2008 10:48:00 AM

--  javascript的问题,帮忙看看
function Yahoo_Search() {}
Yahoo_Search.baseURL = function () {
  return "http://api.search.yahoo.com/WebSearchService/V1/";
}
Yahoo_Search.appid = function () {
  return "YahooSearchSidebar";
}
Yahoo_Search.baseArgs = function () {
  return "appid=" + this.appid();
}
Yahoo_Search.Results = function (args) {
  var xmlUrl = this.baseURL() + "webSearch?"
       + this.baseArgs()
       + "&query=" + args["Doc"]
       + "&zip="
       + "&start=" + args["First"]
       + "&results=" + args["Count"];
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("GET", xmlUrl, false);
  xmlhttp.send(null);
  return this.readXML(xmlhttp.responseXML);
}
Yahoo_Search.readXML = function (xmlDoc) {
  try {
    var retVal = new Array();
    var resultSet = xmlDoc.getElementsByTagName("ResultSet")[0];
    var totalResultsAvailable = parseInt(resultSet.getAttribute("totalResultsAvailable"));  
    var totalResultsReturned = parseInt(resultSet.getAttribute("totalResultsReturned"));
    var firstResultPosition = parseInt(resultSet.getAttribute("firstResultPosition"));
    var start = firstResultPosition;
    var end = firstResultPosition + totalResultsReturned - 1;  
    var results = xmlDoc.getElementsByTagName("Result");
    for (var i = 0; i < results.length; i++) {
      var result = results[i];          
      var title = result.getElementsByTagName(Title)[0].firstChild.nodeValue;
      var summary = ;
      if (result.getElementsByTagName(Summary)[0].firstChild) {
        summary = result.getElementsByTagName(Summary)[0].firstChild.nodeValue;
      }
      var clickUrl = result.getElementsByTagName(ClickUrl)[0].firstChild.nodeValue;
      var url = result.getElementsByTagName(Url)[0].firstChild.nodeValue;
      retVal[i] = { I: start + i, Title: title, Summary: summary, ClickUrl: clickUrl, Url: url };
    }
    return retVal;
  } catch(exception) {
    alert(Exception occurred while reading XML (i= + i + ; start= + start + ;end= + end + ): + exception);
  }
}
昨天开始学这个程序,上面画线部分和之前的Yahoo_Search.Results不太明白,那位高人给指点一下?看懂这个之后,准备用java改一个,不知道能不能成功,有经验的朋友请帮忙……


--  作者:enyaxp
--  发布时间:1/24/2008 2:27:00 AM

--  
画线的部分可以说是Ajax技术的基础语句之一,利用XMLHttpRequest向服务器端发送GET请求,请求中包含了xmlUrl字符串,这个字符串是由baseArgs()的返回值以及args形参的值组合而成。

这程序里缺少onreadystatechange,用于判断请求结束和成功,当state=4&&status=200时,才可以调用readXML将返回的数据按xml格式进行DOM解析。

用java改不出你想要的效果的。


--  作者:娜娜
--  发布时间:1/24/2008 10:59:00 PM

--  
enyaxp,怎么一天不见,从大三变到大四啦?你有MSN吗?看来我要在线问你好多问题呢……
--  作者:enyaxp
--  发布时间:1/24/2008 11:34:00 PM

--  
MSN我的个人资料里面有,我刚加上,不过我一般不怎么上。

有什么问题就发帖或论坛短消息给我好了,我一定尽力帮你


--  作者:娜娜
--  发布时间:1/25/2008 12:20:00 AM

--  
向服务器端发送的get请求是干什么用的?起什么作用啊?
--  作者:enyaxp
--  发布时间:1/25/2008 12:29:00 AM

--  
GET请求是http协议里规定的客户端向服务器端发送的请求消息,表示向服务器查询获取某些信息,描述这些信息特征的数据紧接着GET发出,在这里就是xmlUrl。

和它类似的还有POST请求,和GET不同的是POST用于对服务器上的某些内容进行修改,还有就是携带消息体(更大量的数据)。

这些都是些计算机网络的基础知识,了解就行了。


--  作者:娜娜
--  发布时间:1/25/2008 12:38:00 AM

--  
我得毕业论文跟这些都有关系,老师现在让我写的应该是最基本的东西,我的基础很差,都不知道怎么补,网络的好多知识也应该懂,不然没办法继续,有好的书下载吗?
--  作者:enyaxp
--  发布时间:1/25/2008 1:33:00 AM

--  
你要是需要用java做主体开发语言并应用上面的脚本的话就必然要学jsp/servlet,推荐一本入门的书籍"Head first Servlets and JSP" ,有中文版,极好,挺贵,建议去图书馆借。


此主题相关图片如下:
按此在新窗口浏览图片


--  作者:娜娜
--  发布时间:1/25/2008 10:06:00 AM

--  
你说”这程序里缺少onreadystatechange,用于判断请求结束和成功“,xmlhttp.open("GET", xmlUrl, false);这句中,false不就其这个作用吗?
还有,
Yahoo_Search.appid = function () {
  return "YahooSearchSidebar";
}
是什么?用户ID和密码什么时候传给服务器端呢?

--  作者:孤独
--  发布时间:1/25/2008 10:55:00 AM

--  
在XMLURL里面有用户名跟密码
这程序看起来都头大。。。
我喜欢用JQuery
--  作者:娜娜
--  发布时间:1/25/2008 10:58:00 PM

--  
又要学新的?学不过来了!!
--  作者:enyaxp
--  发布时间:1/25/2008 11:46:00 PM

--  
不好意思没注意。
那个false是用于设置是否异步执行的,一般设为true。设为false表示同步,也就是直到服务器返回数据后才继续执行,你说的对,这里确实不用onreadystatechange。但是用false有隐患,就是如果服务器繁忙或者挂掉了的话整个程序就阻塞在这一行上不往下走了,所以还是用true加回调函数更好些。

以下是引用娜娜在2008-1-25 10:06:00的发言:
你说”这程序里缺少onreadystatechange,用于判断请求结束和成功“,xmlhttp.open("GET", xmlUrl, false);这句中,false不就其这个作用吗?
还有,
Yahoo_Search.appid = function () {
   return "YahooSearchSidebar";
}
是什么?用户ID和密码什么时候传给服务器端呢?



--  作者:enyaxp
--  发布时间:1/26/2008 12:48:00 AM

--  

这个YahooSearchSidebar应该不是用户的id或密码,而应该是搜索服务的代码,用于指定服务器端的特定Servlet来处理紧接着的用户数据串。

以下是引用娜娜在2008-1-25 10:06:00的发言:
Yahoo_Search.appid = function () {
   return "YahooSearchSidebar";
}
是什么?用户ID和密码什么时候传给服务器端呢?



--  作者:娜娜
--  发布时间:1/26/2008 9:10:00 PM

--  
Yahoo_Search.baseArgs = function () {
  return "appid=" + this.appid();
}
这句中baseargs是自定义的函数名吗?他的返回只是什么?this.appid里是什么东西啊?这句会在用户端显示出来吗?是让用户填写id的吗?
--  作者:娜娜
--  发布时间:1/26/2008 9:36:00 PM

--  
还有一堆问题呢……
Yahoo_Search.Results = function (args) {
  var xmlUrl = this.baseURL() + "webSearch?"
       + this.baseArgs()
       + "&query=" + args["Doc"]
       + "&zip="
       + "&start=" + args["First"]
       + "&results=" + args["Count"];
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("GET", xmlUrl, false);
  xmlhttp.send(null);
  return this.readXML(xmlhttp.responseXML);
}
1  "webSearch?" 这个词是利用服务器检索的方式,他后面带的?是不是固定格式??
2  args["Doc"]中的Doc是编程者自己的一个文件还是在这里随便起的一个名字?
3  "&zip=" 这个变数是什么?
4    args["First"] 是什么啊?
5   args["Count"];这个中的Count是什么?

--  作者:enyaxp
--  发布时间:1/27/2008 10:51:00 PM

--  

返回的是个字符串呀,这个字符串是由"appid=" 和this.appid()的返回值拼接而成的。

this.appid <-> Yahoo_Search.appid(),是之前定义的函数,也返回一个字符串"YahooSearchSidebar"。

以下是引用娜娜在2008-1-26 21:10:00的发言:
Yahoo_Search.baseArgs = function () {
   return "appid=" + this.appid();
}
这句中baseargs是自定义的函数名吗?他的返回只是什么?this.appid里是什么东西啊?这句会在用户端显示出来吗?是让用户填写id的吗?


--  作者:enyaxp
--  发布时间:1/27/2008 11:27:00 PM

--  

看来要从最基本的概念讲起了。

以前分析过了这段xmlUrl是客户端向服务器发送请求的请求行中的内容。完整的请求行格式如下:

GET + 服务器资源路径 + ? + 参数(格式为XXX=XXX,多个参数间用&连接) + HTTP1.1

xmlUrl就是红色字所代表的内容,?是资源路径和参数的分隔符。也就是说,this.baseURL() + webSearch 表示一个服务器资源路径,这里指向一个实现网络搜索服务的容器,它和参数中的this.baseArgs()都是固定的不能由用户更改的。

args["Doc"],args["First"]是典型的用字符串作数组索引的例子,args这个形参传入的是一组实例,args["Doc"]表示名称为"Doc"的实例的值,也就是说你在使用Results函数的时候要首先创建几个名为"Doc"、"First"、"Count"的实例,由用户对其赋值后传入函数。

至于这些名称代表什么意思,需要赋什么类型的值,还得查查资料呀。

以下是引用娜娜在2008-1-26 21:36:00的发言:
还有一堆问题呢……
Yahoo_Search.Results = function (args) {
   var xmlUrl = this.baseURL() + "webSearch?"
        + this.baseArgs()
        + "&query=" + args["Doc"]
        + "&zip="
        + "&start=" + args["First"]
        + "&results=" + args["Count"];
   var xmlhttp = new XMLHttpRequest();
   xmlhttp.open("GET", xmlUrl, false);
   xmlhttp.send(null);
   return this.readXML(xmlhttp.responseXML);
}
1  "webSearch?" 这个词是利用服务器检索的方式,他后面带的?是不是固定格式??
2  args["Doc"]中的Doc是编程者自己的一个文件还是在这里随便起的一个名字?
3  "&zip=" 这个变数是什么?
4    args["First"] 是什么啊?
5   args["Count"];这个中的Count是什么?



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms