很惭愧,我还不懂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>
非常感激!
如果用客户端的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>
非常感激!
HttpWebRequest 请求远程地址,将结果抓回来
感谢各位!不过,我不懂ASP.net。据我所知,ASP能做到的ASP.net实现起来更方便。
楼上几位大哥大姐能否写得详细一些?
谢谢!
当初曾经考虑过很时髦的Web Service,但是效率太低。网站之间的数据传输用我这个类似AJAX(但不是异步)的方式效率更高。
直接在JS里面操作不是很方便么?
所以我希望回复的人首先看明白我的帖子。回复帖子,让别人看帖子,都是要花时间的。大家的时间都宝贵。我需要使用asp.net编写的网站可以在服务器端访问我的ASP网页提供的服务。我的服务只返回1或者0两个字符串。
至于Session是在asp.net编写的网站内部使用的,只是在这个网站中给每一个访问者提供一个我的服务是否成功的标记。如果在客户端用AJAX,那就非常简单了。我需要在服务器端访问我的ASP。
在网页中用Javascript使用ajax,用iframe,这些是前台客户端的小儿科。
请再看看我的帖子。
/***开始***/
<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代码的应该很难知道该怎么做。不过拜托后面跟帖的各位,不要再没有看懂我的需求就回复了。
分数可能不多,我送给他80分。落后的ASP和JSP都能实现,时髦的ASP.net应该也可以实现吧?
不要再提Web Server,网页之间的数据交换没必要用这种效率低下的炒做技术。还是现在用.net的程序员都是只会拖动控件,在属性窗口改变属性,不再有人用记事本之类的熟练方法写代码?
<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();
}
}
}
}
可是调试时每次运行到
res = (HttpWebResponse)req.GetResponse();
就会跳到catch(Exception ex)
错误信息是:基础连接已经关闭: 无法连接到远程服务器。我在CheckAJAX函数里又加了一个Label,显示参数url的内容。没有错误,这个参数复制到IE的地址栏就可以正常访问,返回1或0。这是怎么回事啊?
也找到了一个产生时间戳的函数,稍作了修改:
//得到时间戳的函数
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代码?
(最近日子过得很大手大脚,以前最多才给30分)