我的页面有一个按钮,点击这个按钮就会执行抓取的工作,我想抓取一条,在页面的textbox中显示一条,但是现在都是执行抓取完毕后,textbox的内容才显示,有没有方法,可以抓取一条,页面显示一条,是b/s模式,请大侠支招

解决方案 »

  1.   

    ajax去抓取,或者定时器。b/s程序和c/s程序是有本质差别的。不要用c/s的思想去考虑b/s
      

  2.   

    你可以参考定时器的例子
    http://blog.csdn.net/net_lover/article/details/4546586如果使用ajax做,你可以返回之后再去执行下一个任务,如此循环就可以了了
      

  3.   

    好的,之前用json返回,也不行,如果有好的代码,请高手贴出来,我学习一下,谢谢
      

  4.   


    你自己不是说出思路了吗》.ajax({
      url: "test.aspx",
      success: function(){
        //显示到textbox,然后执行一次抓取
      }
    });
      

  5.   

    本帖最后由 Sandy945 于 2011-12-01 16:55:27 编辑
      

  6.   

    js+ajax
    用js定时去调用ajax的方法
    ajax方法就是去执行你的数据每条显示(或者用bool来返回判断一条数据加载是否完成)
    然后textbox绑定显示
    注意控制好时间
      

  7.   

    但是我有很多类别,而且在for循环里取类别再抓取,所以,用ajax怎么弄,我用的还是执行完了再显示,这是前台的js:$.ajax({
       type: "POST",
       url: "google.aspx",
       success: function(msg){
       var m=msg.split("<")[0];
         alert(m);
       }
    });
    这是后台方法
       public void searchCate()
        {        string[] str = keyword.Split('、');
            for (int i = 0; i < str.Length; i++)
            {
                string catename = str[i];
                string url = "http://www.google.com.hk/search?hl=zh-CN&source=hp&q=" + Server.UrlEncode(catename.Trim());
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
                Stream resStream = respone.GetResponseStream();
                Encoding encoding = Encoding.GetEncoding("gb2312");
                StreamReader reader = new StreamReader(resStream, encoding);
                string resphtml = reader.ReadToEnd().ToString();
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(resphtml);
                HtmlNode navNode = doc.GetElementbyId("gbz");//或gbw
                string strs = getContext("//ol/li[@class='g']/h3[@class='r']/a", navNode, catename);//取第一页的内容
                resStream.Close();
                Response.Write("str:" + strs);
                Thread.Sleep(5000);
            }    }
      

  8.   

    阿非,你那个httpcontext怎么传啊
      

  9.   

    Handler.ashx.cs不要添加页面,新建Generic Handler 一般处理程序
      

  10.   

    我是这么写的,我不知道Handler中的Server.UrlEncode用什么可以代替: public void ProcessRequest (HttpContext context) {
            string[] str = keyword.Split('、');
            for (int i = 0; i < str.Length; i++)
            {
                string catename = str[i];
                string url = "http://www.google.com.hk/search?hl=zh-CN&source=hp&q=" +Server.UrlEncode(catename.Trim());
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
                Stream resStream = respone.GetResponseStream();
                Encoding encoding = Encoding.GetEncoding("gb2312");
                StreamReader reader = new StreamReader(resStream, encoding);
                string resphtml = reader.ReadToEnd().ToString();
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(resphtml);
                HtmlNode navNode = doc.GetElementbyId("gbz");//或gbw
                string strs = getContext("//ol/li[@class='g']/h3[@class='r']/a", navNode, catename);//取第一页的内容
                resStream.Close();
                context.Response.Write("<script type='text/javascript'>parent.callBack(" +
      strs + ");</script>");
                context.Response.Flush();
                System.Threading.Thread.Sleep(1000);
            }
      

  11.   

    应该用这个吧?context.Server.UrlEncode
      

  12.   

    用 HttpUtility.UrlEncodecontext.Response.Write("<script type='text/javascript'>parent.callBack(" +
      strs + ");</script>");
    =》
    context.Response.Write("<script type='text/javascript'>parent.callBack(" +
      strs[i] + ");</script>");
      

  13.   

    你可以先运行我的那个DEMO 看下效果~ 
      

  14.   

    你的那个也有问题,报网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2)
    时间戳: Thu, 1 Dec 2011 10:01:51 UTC
    消息: 缺少 ')'
    行: 1
    字符: 21
    代码: 0
    URI: http://localhost:59015/CaiJiTools/Handler.ashx
      

  15.   

    呃。。哪里有问题,我是考过来的啊    context.Response.Write("<script type='text/javascript'> parent.callBack(" + strs.ToString() + ");</script>");
                context.Response.Flush();就是考的你发的源码
      

  16.   

    .aspx 页面呢 也是一样的么
      

  17.   

    难道parent.callBack(" + 
    i.ToString() + ");这个的参数只能传Int类型?
      

  18.   


    额~  这样改context.Response.Write("<script type='text/javascript'>parent.callBack('" + 
    i.ToString() + "');</script>");
    -------------------
    传数值不用加''  字符串要加''
      

  19.   

    额 (⊙o⊙)…你的字符串中有'context.Response.Write("<script type='text/javascript'>parent.callBack(\"" +  
    i.ToString() + "\");</script>");用 \" 替换'
      

  20.   

    <script type='text/javascript'>parent.callBack('url:[http://shop.tompda.com/]---title:[TomPDA数码交易平台]---score:0分
    url:[http://bbs.dospy.com/forum-141-1.html]---title:[个人闲置数码交易区- 塞班智能手机论坛-全球最大的综合智能手机中文论 ...]---score:0分
    ');</script>这样的格式有问题?