很惭愧,我还不懂ASP.net。虚心向各位ASP.net版的XDJM们请教。我用ASP写了一个网页,返回结果只是字符串的“1”或者“0”,连HTML标签也没有。
如果用客户端的AJAX访问就简单了。可是我希望用ASP.net写的网页在它的服务器端能够使用XMLHttpRequest或其他方式访问我的ASP网页,将ASP返回的字符串(1或0)保存在ASP.net的Session里。要求:
1、最好写1个函数,名称是CheckAJAX,参数是访问的ASP的URL。函数内部用XMLHttpRequest或其他方式访问URL,返回ASP网页的结果,不使用异步访问。
如果用XMLHttpRequest,open方法的三个参数是"GET"、URL、false。
2、这个ASP.net文件也需要代入两个参数:MyID和MyCode。这两个参数是提交到这个ASP.net文件的表单中文本框的名称。
用ASP.net实现类似下面代码的功能(我的是ASP代码):/****开始****//*表单中名称为MyCode的文本框中输入了文字,asp代码*/
<%
        If Request.Form("MyCode") <>"" Then                /*执行CheckAJAX函数,代入URL参数,将返回内容存入Session变量"Result"中。
                /*需要加入时间戳,使不能使用缓存。ASP的Timer可以返回从半夜零点开始到现在的毫秒数
                Session("Result") = CheckAJAX("http://www.AAAAA.com/Check.asp" _
                                              "?TimeStamp=" & Timer & _
                                              "&ID=" & Request.Form("MyID") & _
                                              "&Code=" & Request.Form("MyCode"))
        End If
%><p>这是HTML代码。URL返回结果是:<%=Session("Result")%></p>
/*ASP代码*/
<%
        If Session("Result") = "1" Then
Response.Write("<p>是1</p>")
        Else
Response.Write("<p>不是1</p>")
        End If
%>/****结束****/3、请写出完整的包括HTML的代码。就是包括:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
</body>
</html>
非常感激!

解决方案 »

  1.   

    楼上正解
    HttpWebRequest 请求远程地址,将结果抓回来
      

  2.   

    艾,居然要做语言翻译了,可是asp我不会阿
      

  3.   

    我是楼主。
    感谢各位!不过,我不懂ASP.net。据我所知,ASP能做到的ASP.net实现起来更方便。
    楼上几位大哥大姐能否写得详细一些?
    谢谢!
      

  4.   

    用session保存不就行了!应该可以直接访问吧!!
      

  5.   

    请仔细看看我的帖子。我就是想知道asp.net中怎么实现我的需求,怎么保存session。ASP是我写的提供一种服务的网页。我希望其他语言的网页能够在它的服务器访问我的ASP,更新它的Session。
    当初曾经考虑过很时髦的Web Service,但是效率太低。网站之间的数据传输用我这个类似AJAX(但不是异步)的方式效率更高。
      

  6.   

    为什么不用XmlHttp访问你的网页??
    直接在JS里面操作不是很方便么?
      

  7.   

    AJAX和Session不能跨域这样的常识我当然知道。
    所以我希望回复的人首先看明白我的帖子。回复帖子,让别人看帖子,都是要花时间的。大家的时间都宝贵。我需要使用asp.net编写的网站可以在服务器端访问我的ASP网页提供的服务。我的服务只返回1或者0两个字符串。
    至于Session是在asp.net编写的网站内部使用的,只是在这个网站中给每一个访问者提供一个我的服务是否成功的标记。如果在客户端用AJAX,那就非常简单了。我需要在服务器端访问我的ASP。
      

  8.   

    用ajax就可以吧。iframe也可以。
      

  9.   

    真没办法,还有人没有看懂。
    在网页中用Javascript使用ajax,用iframe,这些是前台客户端的小儿科。
    请再看看我的帖子。
      

  10.   

    我贴出我现在用ASP写的全部代码。核心代码只有4行。
    /***开始***/
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Check Validate Code By WFSVI service</title>
    </head>
    <body><%
    Function CheckAJAX(praURL)
    Dim myXMLHttpObj
    Set myXMLHttpObj = Server.CreateObject("Msxml2.XMLHTTP.5.0")

    myXMLHttpObj.open "GET",praURL,false
    myXMLHttpObj.send CheckVCByAJAX = myXMLHttpObj.responseBody Set myXMLHttpObj = Nothing
    End function If Request.Form("MyCode") <>"" Then
    Session("Result") = CheckAJAX("http://www.AAAAA.com/Check.asp?TimeStamp=" & Timer & _
    "&ID=" & Request.Form("myID") & _
    "&Code=" & Request.Form("myCode"))
    End If
    %><p>这是HTML代码。URL返回结果是:<%=Session("Result")%></p><%
    If Session("Result") = "1" Then
    Response.Write("<p>是1</p>")
    Else
    Response.Write("<p>不是1</p>")
    End If
    %>
     
    </body>
    </html>
    /***结束***/其中,假设www.AAAAA.com是我的网站,我用ASP写了一个网页 Check.asp,需要带入2个参数:ID和Code。这个网页提供了一个服务,咱们姑且不需要知道是什么服务,这样会使问题复杂化。只需要知道,通过带入的2个参数经过处理,最终Check.asp返回的结果只是字符串“1”或“0”。“1”代表成功。另外一个网站,假设是www.BBBBB.com,是别人的网站。这个网站可能是asp.net,也可能是PHP或JSP。
    这个网站的访问者打开一个动态网页,输入表单中名称是MyID和MyCode的文本框,提交到他的服务器(也就是www.BBBBB.com。会有人问为什么吗?请再看看上一行字。)。提交到www.BBBBB.com服务器的动态网页在他自己的服务器端访问我的www.AAAAA.com/Check.asp,带入三个参数:第一个是时间戳,单位是毫秒,保证每次访问都不重复,不使用缓存。第二个和第三个是表单中名称是MyID和MyCode文本框的内容。在www.BBBBB.com访问了我的ASP之后,我需要它能将Check.asp返回的结果存入它自己的Seesion变量中。这样它就可以知道自己的每个访问者执行了我的服务之后的结果。这是我琢磨出来的Seesion跨域共享的方法。在两个都是ASP写的网站中已经可以成功“共享”Session。
    但是我需要其他的动态语言编写的www.BBBBB.com也能使用这个方法。所以来此请教。(我在其他版也发了同样的帖子。有人抱怨50分太少。这是我给最多分的一次了,不过我可以加分)这里是ASP.net版,熟练者一定能看懂上面贴的ASP代码。看不懂这些ASP代码的应该很难知道该怎么做。不过拜托后面跟帖的各位,不要再没有看懂我的需求就回复了。
      

  11.   

    JSP版有一位热心的朋友帮我解决了用JSP访问ASP的代码。
    分数可能不多,我送给他80分。落后的ASP和JSP都能实现,时髦的ASP.net应该也可以实现吧?
    不要再提Web Server,网页之间的数据交换没必要用这种效率低下的炒做技术。还是现在用.net的程序员都是只会拖动控件,在属性窗口改变属性,不再有人用记事本之类的熟练方法写代码?
      

  12.   

    我确实不太会手写test.aspx内容<%@ Page language="c#" Codebehind="test.aspx.cs" AutoEventWireup="false" Inherits="TestWeb.test" %>
    <HTML>
    <HEAD>
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <P>MyID:
    <asp:TextBox id="txtMyID" runat="server"></asp:TextBox></P>
    <P>MyCode:
    <asp:TextBox id="txtMyCode" runat="server"></asp:TextBox></P>
    <P><asp:Button id="btnOK" runat="server" Text="Button"></asp:Button></P>
    <P><asp:Label id="labInfo" runat="server"></asp:Label></P>
    </form>
    </body>
    </HTML>
    *****************************************************************************test.aspx.cs内容using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Net;
    using System.IO;namespace TestWeb
    {
    /// <summary>
    /// test 的摘要说明。
    /// </summary>
    public class test : System.Web.UI.Page
    {
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    protected System.Web.UI.WebControls.TextBox txtMyID;
    protected System.Web.UI.WebControls.TextBox txtMyCode;
    protected System.Web.UI.WebControls.Button btnOK;
    protected System.Web.UI.WebControls.Label labInfo;

    private void Page_Load(object sender, System.EventArgs e)
    {



    } private void btnOK_Click(object sender, System.EventArgs e)
    {
    string myCode=txtMyCode.Text.Trim();
    if(myCode!=string.Empty)
    {
    string result=CheckAJAX("http://www.AAAAA.com/Check.asp" 
    +"?TimeStamp=xxx&ID=" + txtMyID.Text.Trim()  
    +"&Code=" + myCode);
    Session["Result"] = result;
    labInfo.Text=result=="1"?"是1":"不是1<br>"+result; }
    }
    private string CheckAJAX(string url)
    {
    HttpWebRequest req = null;
    HttpWebResponse res = null;
    try
    {
    req = (HttpWebRequest)WebRequest.Create(url);
    res = (HttpWebResponse)req.GetResponse();
    return new StreamReader(res.GetResponseStream()).ReadToEnd();
    }
    catch(Exception ex)
    {
    return ex.Message;
    }
    finally
    {
    if(res != null)
    res.Close();
    }
    }
    }
    }
      

  13.   

    感谢楼上的代码!我虽然不懂.net,但我试着做了一次。
    可是调试时每次运行到
        res = (HttpWebResponse)req.GetResponse();
    就会跳到catch(Exception ex)
    错误信息是:基础连接已经关闭: 无法连接到远程服务器。我在CheckAJAX函数里又加了一个Label,显示参数url的内容。没有错误,这个参数复制到IE的地址栏就可以正常访问,返回1或0。这是怎么回事啊?
      

  14.   

    我搞明白为什么出现“基础连接已经关闭”的错误了。是因为防火墙。我把CheckAJAX访问的地址设定为可以信任就可以了。
    也找到了一个产生时间戳的函数,稍作了修改:
    //得到时间戳的函数
    private UInt64 GetTimeStamp()
    {
    TimeSpan myTimeStamp = DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(2000, 1, 1));
    return Convert.ToUInt64(myTimeStamp.TotalMilliseconds);
    }
    另外一个问题,CheckAJAX函数的返回结果一定要输出到<asp:Label id="labInfo" runat="server"></asp:Label>吗?
    我该怎样才能让结果输出到</form>的下面,输出成带有<p>和</p>的HTML代码?
      

  15.   

    在类里面定义,public string Info=string.Empty;Info=result=="1"?"是1":"不是1<br/>"+result; //这里<br>result在页面</form>后面<p><%=Info%></p>
      

  16.   

    非常感谢fastson的帮助!为了公平,我也象在JSP版那样加分加到80。祝你好运!
    (最近日子过得很大手大脚,以前最多才给30分)