文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>前台页面通过ajax环境和js调用web service的几种方法

前台页面通过ajax环境和js调用web service的几种方法

时间:2010-09-06  来源:china_lipeng

 目录:

1.配置ajax环境

2.js中调用web service (ajax环境) 方法一

3.方法二

4.方法三

5.ajax中的错误处理

//6.写的比较快 如果有疏忽之处  如能指出感激不尽。以免误人子弟。

使用ajax核心组件webconfi里的配置

1.contrlos节配置

tagPrefix:命名空间的别名 也就是空间的前缀 

Assembly 指定加载的程序集

PublicKeyToken 程序集的公钥

 

代码
  <system.web>

<pages>

<controls>

<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

</controls>

</pages>

 

2.httpHandlers节的配置

这里的配置主要针对一些特殊的请求如:ajax请求webservice 和javascript编译文件时。

.asmx 是处理的web服务的文件,扩展名为 。Axd 的http处理则是对封装的javascript文件的处理。

 

代码
<httpHandlers>

<remove verb="*" path="*.asmx"/>

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>

</httpHandlers>

 

 

1.在ScriptManageer中指定javascript文件路径,引用webservice时也是在<Script>节点下的<asp:ScriptReFerence>节点添加 

 

 

代码
    <asp:ScriptManager ID="ScriptManager1" runat="server">

<Scripts>

<asp:ScriptReference Path="showDiv.js"/>

</Scripts>

</asp:ScriptManager>

 

 

 

2.调用ajax 的CTP增值组件为: Name为js文件名; Assembly为程序集;

 <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js" />

 

//ScrptManager的主要作用是在客户端注册一些服务器端的代码,如将webservice注册在客户端,从而实现在客户端调用webservice

 

//js中调用web service (ajax环境) 方法一

1.在项目中引用:

System.Web.Extension

System.Web.Extension.Design

2.在webservice 文件中引用

using System.Web.Script.Services;

3.在webservice中的类前添加 [System.Web.Script.Services.ScriptService]属性

 

调用页 

在<asp:ScriptManagere> 节点下注册如:将webservice注册在客户端

 

代码
 <asp:ScriptManager ID="ScriptManager1" runat="server">

<Services>

<asp:ServiceReference Path="jsWebService.asmx"/>

</Services>

</asp:ScriptManager>



//调用方法

<script type="text/javascript" language="javascript">

function ExeWebservice()

{

//WebService1为webservice的类名 HelloWord该类里的一个方法

//这里的指定的处理方法不带括号和参数

//无参数传入

WebService1.HelloWord(GetResult);

//有参数传入如参数 num num2

var num
=0;

var num2
=9;

WebService1.HelloWord(num,num2,GetResult);



}

//处理调用webservice返回的方法

function GetResult(str)

{

alert(str);

}

</script>



 

 

//前面的 <asp:ServiceReference />节是直接在前台书写 也可以在后台添加  其他的节点也类似方法

 

  protected void AddWebService()

    {        

        //创建服务注册对象

        ServiceReference service = new ServiceReference("WevService2.asmx");

        //添加到Script节点

        //ScriptManager1 是页面文件<ScriptManager/>节点的id  因为他为服务器控件所以可以直接访问

        ScriptManager1.Scripts.Add(service);

}

 

//??在有母板页的情况下 并且母板页中存在ScriptManger 这时内容页如何添加其他的webservice

//这时使用ScriptManageProxy

 

//一个页面只能有一个ScriptManager;这里的一个页面的意思当页面有母板页时 内容页母板页两者间只能有一个ScriptManager

//不在母板页中调用所有的webservice是为了性能

//用法和ScriptManage完全一样 只不过这个是代理如:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">

            <Scripts>

                <asp:ScriptReference Path="abcd.asmx" />           

            </Scripts>

        </asp:ScriptManagerProxy>

 

//在后台中调用和前面使用ScriptManger一样 如这里为 对象id为 ScriptManagerProxy1

//前台js不变

  protected void AddWebService()

    {        

        //创建服务注册对象

        ServiceReference service = new ServiceReference("WevService2.asmx");

        //添加到Script节点

        //ScriptManager1 是页面文件<ScriptManager/>节点的id  因为他为服务器控件所以可以直接访问

        ScriptManagerProxy1.Scripts.Add(service);

}

 

//js中调用web service 方法二(在后台声明static方法)

//前提 页面中必须有ajax的<ScriptManager />j节点

//1.建一个普通aspx页

//后台代码

//这里的方法必须为静态

    [System.Web.Services.WebMethod]

    public static string GetData(string str)

    {

        return "[" + str + "]";

}

 

页面代码:

function Button1_onclick()

 {

//PageMethods 当前页的PageMethods 

//GetData 为后台的静态方法

 var name="图图";

PageMethods.GetData(name,Show);

}

function Show(str)

{

alert(str);

}

 

//可能出现的问题 "PageMethods未定义"或"对象不支持此属性或方法

//1.页面中必须有ajax的<ScriptManager />j节点 并且webconfig里必须配置好了ajax

//2.不能将<ScriptManager /> 节点中的EnableMethods设置为true;

//3.

//js中调用web service 使用异步请求 方法三

<script type="text/javascript" language="javascript"> 

// <!CDATA[

   

var xmlhttp;

 

//创建一个xmlhttp请求对象

//该方法一般浏览器都没有问题

 function CreateXMLHttpRequest()

 {

if(window.ActiveXObject)//用于ie浏览器

{

 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

else if(window.XMLHttpRequest)//其他浏览器

{

xmlhttp=new xmlHttpRequest();

}

else

alert('创建不了请求对象,没戏了。');

}  

 

//调用webservice的方法

function GetData()

{

//请求的webservice 这里也可以为一般的网址

var url="aaa.asmx?id=3&name='tutu'";

//escape()方法处理中文提交错误 没测试  应该这里也可用

//var url="aaa.asmx?id=3&name=escape("图图")";

// var url="aaa.asmx";

//GET为发送请求的类型 

//true 为异步请求

xmlhttp.Open("GET",url,true);

xmlhttp.send();

 

////多说一点 

// //1.GET方法

// xmlhttp.Open("GET","www.aaaa.com?id=3 & name='tutu'",true);

// //xmlhttp.send();和xmlhttp.send(null);一样的

// //xmlhttp.send();

// xmlhttp.send(null);

//

// //2.POST方法

// //建议不要用POST方法 这和服务器设置和环境变量有关 不建议用 

// xmlhttp.Open("POST","www.aaaa.com?id=3 & name='tutu'",true);

// //xmlhttp.send();和xmlhttp.send(null);一样的

// //xmlhttp.send();

// xmlhttp.send("id=3 &name='tutu'");

 

//3.GET和POST方法

//GET发送的数据现在在浏览器地址里 当然这里不显示

//GET发送的数据少 POST多

//以前默认get 好像从2.0开始默认为post提交

//在后台取传过来的参数方法不一样。POST 为:Request.Form["id"] GET为:Request.QueryString["id"]  通用的:Request["id"]

 

}

//处理返回数据的方法

//str

function ShowData()

{

if(xmlhttp.readystate==4 )//异步掉哟娜完成

{

if(xmlhttp.status==200)//html请求执行完成

{

//1.responsetext 返回的是text

//2.responsexml 返回xml  要求服务器响应必须符合xml格式

//3。responsebody 返回body信息

//如果只想返回你后台方法执行的信息  可以将页面文件中除了<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" %> 全部删掉

 

alert(xmlhttp.responsetext);

//bytes2BSTR 这是个处理中文乱码的vb方法 可在网上搜一下

//alert(bytes2BSTR(xmlhttp.responsetext));

}

 

}

}

 // ]]>

</script>

 

 

//Ajax中的错误处理

使用过ajax的就会发现 当发生错误的时候即使我们不捕获 ajax也会已alert的方式弹出显示错误信息

在可视页面上选中ServiceManager控件 F4 打开属性 转到事件 添加AsyncPostBackError事件

//ServiceManager捕获UpdataePanel里发生的错误

//如下 下面的Button1控件在UpdatPanel1里

 protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)

    {

        //1.打印定义的键值对中的错误信息

        //如果取消下面的注释需要+= 否则这里的信息被替换了

        if (e.Exception.Data["errornoe"] != null)

        {

            string errorstr = e.Exception.Data["errorone"].ToString();

            ScriptManager1.AsyncPostBackErrorMessage = errorstr;

        }

 

        //2。这里即使注掉也会弹出错误信息 就算没有这个事件也会弹出错误提示

        //打印原始错误信息

        //ScriptManager1.AsyncPostBackErrorMessage = "error:"+e.Exception.Message;

       

    }

    protected void Button1_Click(object sender, EventArgs e)

    { 

        //int a = int.Parse("");

        try

        {

            //如果

            int a = int.Parse("");

        }

        catch (Exception ex)

        {

            //添加一个错误信息

            ex.Data["errorone"] = "类型转换错误";

            //发出错误信号

            throw ex;

        }        

    }

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载