重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
javascript是前端开发语言,经常与html、css技术一起构成前端开发。javascript一般通过ajax与后台进行数据交互。其实和javascript有个相同名称的java 是后端开发语言,他俩虽然都有java这个单词,但是他俩没什么直接关系。
创新互联公司致力于互联网品牌建设与网络营销,包括成都网站设计、网站建设、外贸网站建设、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联公司为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联公司核心团队10年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。
方法一、用ClientScript类动态添加脚本 用法如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。 ClientScript.RegisterStartupScript(ClientScript.GetType(), myscript, scriptMyFun();/script); 这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。 可以在程序的任何地方执行,o(∩_∩)o...,是不是很好用呢 注意执行顺序:先执行Client ,再执行Server 方法二、用Response.Write方法写入脚本 比如在你单击按钮后,先操作数据库,完了后显示已经完成,可以在最后想调用的地方写上 Response.Write(script type='text/javascript'alert();/script); 这个方法有个缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定义,比如: Response.Write(script type='text/javascript'function myfun(){...}/script); 方法三、是我自认为最灵活的一种,ClientScript.RegisterStartupScript实例代码:StringBuilder sb = new StringBuilder(); sb.Append(script language='javascript'); sb.Append(Button2_onclick(' + serverPath + ')); sb.Append(/script); ClientScript.RegisterStartupScript(this.GetType(), LoadPicScript, sb.ToString()); 方法四、Button1.Attributes.Add(onclick, return Client_Click()); “Client_Click() “是一个前台方法,可以替换成一般的脚本如:retrun confirm('确定删除吗?')
使用JavaScript访问后台的方法,尝试了以下几种方法: 1.在%%中直接书写代码段 2.通过js直接执行button的click()方法 触发后台代码 3.Ajax 参考 在后台代码处理页面中引入要访问的方法 4.将该方法发布为webservice 通过javascript直接调用webservice. 项目中需要一次性循环生成多张密码卡,而且麻烦的地方在于,前台后台需要共享相当多的属性,通过hiddenField来传递。而每张密码卡都需要首先调用后台getTopMatrix()方法返回一个字符串,客户端获得字符串后做处理并存储至EXCEL,若此过程成功则调用另一个后台方法preToFormal()更新数据库。初步尝试的时候使用了方法一,方法一的缺点比较明显,当页面加载的时候%%中的内容被自动解析,无法实现可控的调用。 script /*直接获取返回值*/ var str_matrix="%=getTopMatrix()%"; /script 方法二解决了可控性的问题。实现步骤如下: 1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2、在前台写一个js函数,内容为document.getElementById("btn1").click(); 3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数; 具体实现代码略。 当通过click事件触发后台方法后,后台方法里面对一个HiddenField赋值.而此时前台的js代码仍在执行,需要用到这个HiddenField处理后的值。结果往往是后台没有为HiddenField赋值前台js代码已经取到这个HiddenField的值,这时候仍然是空值。而通过加计时器的方法又显得相当笨拙,且效率很低。 这个需求最终通过方法三Ajax解决,解决步骤: 1、首先发起一个Ajax请求,访问后台页面中的getTopMatrix()方法获取密码字符串,为避免方法二中的问题,采用Ajax的同步方式。 2、请求响应完毕之后,获取返回的密码字符串通过Javascript处理并存储至Excel。 3、步骤2成功之后则发起另一个ajax请求,更新数据库相关字段。
方法一:直接使用%=%调用
前台JS:
[javascript] view plain copy
script type="text/javascript"
var methodStr = "%=BehindMethod() %";
alert(methodStr);
/script
后头方法:
[csharp] view plain copy
public static string BehindMethod()
{
return "这是一个后台的方法";
}
方法二:用ajax调用
前台js:
[javascript] view plain copy
script type="text/javascript" src="js/jquery-1.4.3.min.js"/script
script type="text/javascript"
var params = '{ext:"p9hp"}'; //参数,注意参数名要注意和后台方法参数名要一致
$(function(){
$("#btnOk").click(function(){
$.ajax({
type:"POST", //请求方式
url:"AjaxDemo.aspx/GetImg", //请求路径:页面/方法名字
data: params, //参数
dataType:"text",
contentType:"application/json; charset=utf-8",
beforeSend:function(XMLHttpRequest){
$("#tips").text("开始调用后头方法获取图片路径,请等待");
$("#imgFood").attr("src","image/loading.gif");
},
success:function(msg){ //成功
$("#imgFood").attr("src",eval("("+msg+")").d);
$("#tips").text("调用方法结束");
},
error:function(obj, msg, e){ //异常
alert("OH,NO");
}
});
});
});
/script
页面html:
[html] view plain copy
body
form id="form1" runat="server"
div
label id="tips"/label
img id="imgFood" /
input value="点击我,给你看一张图片" type="button" width="35px" id="btnOk" /
/div
/form
/body
后台方法:
[csharp] view plain copy
[System.Web.Services.WebMethod]
public static string GetImg(string ext)
{
System.Threading.Thread.Sleep(5000);//为了有点等待的效果,延迟5秒
StringComparer sc = StringComparer.OrdinalIgnoreCase;
string[] extArr = new string[] { "php", "asp", "aspx", "txt", "bmp" };
bool f = extArr.Any(s=sc.Equals(s,ext)); //判断传入的后缀名是否存在
if (f)
{
return "image/54222860.jpg";
}
return "image/star1.jpg";
}
方法三:AjaxPro (也是ajax)
第一步:下载AjaxPro.dll(或者AjaxPro.2.dll),并且添加引用到项目
第二步:修改配置文件web.config
[csharp] view plain copy
system.web
httpHandlers
!--注册ajaxPro.2--
add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/
/httpHandlers
/system.web
第三步:对AjaxPro在页Page_Load事件中进行运行时注册。如:
[csharp] view plain copy
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxDemo)); //注册
}
第四步:创建服务器方法,并且用[AjaxPro.AjaxMethod]标注
[csharp] view plain copy
[AjaxPro.AjaxMethod]
public string GetImgByAjaxPro()
{
return "image/54222860.jpg";
}
第五步:前台JS的调用:
[javascript] view plain copy
function GetMethodByAjaxPro() {
var a = JustTest.AjaxDemo.GetImgByAjaxPro();//JustTest是当前的名字空间,AjaxDemo表示后台类
document.getElementById("imgAjaxPro").src = a.value;
}