ajax的作用是用来进行异步http请求,获取远程数据。在实践中,能学到好多。这不在实践中把ajax给理解了一些。积累了两种Asp.net程序使用ajax的方式。

1、通过一般处理程序.ashx

vs目录如下图:


(1)新建个web页面(.aspx),写一个简单的html页面。

<form id="form1" runat="server" method="post">
        <div >
            <div id="prompt"></div>
            <div>
                <label>账号</label>
                <input type="text" id="personalnewphone" value="15712345678" placeholder="邮箱/手机号" runat="server" />
                <button type="button" id="FqAuthcode" runat="server" >
                    获取验证码
                </button>
            </div>
        </div>
    </form>

(2)引入jquery文件,写ajax传值方法。

<script src="../js/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            //获取验证码
            $("#FqAuthcode").bind("click",function () {

                var _loginname = $("#personalnewphone").val();

                if (_loginname == '') {
                    $('#prompt').removeClass('hidden').addClass('text-danger').html('手机或邮箱不能为空');
                    return false;
                }
                $.post("../ajax/Getcode.ashx",{ action: 'register',loginname: _loginname },function (data) {
                    if (data.code == 10000) {
                        $("#sub-btn-Box").removeClass('hidden');
                        $(".personalcode").css("display","block");
                        $('#prompt').removeClass('hidden').addClass('text-danger').html(data.message);
                    } else {
                        $('#prompt').removeClass('hidden').addClass('text-danger').html(data.message);
                    }
                    console.log(data.message);
                },'json');
            });

	    });
    </script>


$post方法与$get方法是在jquery中高层实现常用的。post与get方法的区别跟字面意思的区别一样。post是向指定的资源提交要处理的数据。get是从指定的资源请求数据。例子中的业务需求是,把手机号提交到后台,进行存在性验证,以及给该手机号发验证码等处理。需要把页面中的手机号提交,因此用post方法。

例子中的需求还可以通过jquery底层ajax实现。


$.ajax({
                    url: "../ajax/Getcode.ashx",async:false,data:{ action: 'register',success: function (data) {
                        if (data.code == 10000) {
                            $("#sub-btn-Box").removeClass('hidden');
                            $(".personalcode").css("display","block");
                            $('#prompt').removeClass('hidden').addClass('text-danger').html(data.message);
                        } else {
                            $('#prompt').removeClass('hidden').addClass('text-danger').html(data.message);
                        }
                    },dataType: "json"
                });



(3)新建一个一般处理程序,接收通过ajax方法传过来的值,进行处理,然后返回ajax方法。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;

namespace Asp.net_Ajax_Demo1.ajax
{
    /// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = "text/plain";
            context.Response.ContentType = "text/html;charset=utf-8";
            //获取传过来的参数
            string action = context.Request.Params["action"]; //方法名称
            string loginname = context.Request.Params["loginname"]; //要重置密码的账号


            //调用函数
            string json = GetJsonStr(action,loginname);
            context.Response.Write(json);//返回处理结果
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        private string GetJsonStr(string action,string loginname) {
            StringBuilder jsonString = new StringBuilder();
            switch (action)
            {
                case "register"://注册发送验证码
                    //Todo:发送验证码方法省略

                    jsonString.Append("{\"code\":\"10000\",\"message\":\"验证码发送成功\"}");
                    break;
                default:
                    jsonString.Append("{\"code\":\"1\",\"message\":\"未知错误,请联系管理员\"}");
                    break;
            }

            return jsonString.ToString();

        }
    }
}

之所以用switch判断,是为了用同一个一般处理程序(Handler)处理多个ajax请求。如果不用switch判断的话,就要建立多个Handler。


效果如图所示:


2、不通过一般处理程序.aspx

目录结构如图:

(1)新建webservice页面(.asmx)。取消注释行,使用web服务

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Text;

namespace WebApplication1.web
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolBoxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string GetCode(string loginname)
        {
            StringBuilder jsonString = new StringBuilder();
            
            //Todo:发送验证码方法省略
            jsonString.Append("{\"code\":\"10000\",\"message\":\"验证码发送成功\"}");
            return jsonString.ToString();
        }
    }
}



(2)新建web页面(.aspx)。添加页面基本元素及布局。添加ScriptManager,用来相应webservice

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.web.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>ajax_demo2</title>
</head>
<body>
    <form id="form1" runat="server">

        <%--响应webservice--%>
        <asp:ScriptManager ID="clientService" runat="server">
            <Services>
                <asp:ServiceReference Path="~/web/WebService1.asmx" /><%--webservice路径--%>
            </Services>
        </asp:ScriptManager>


        <div >
            <div id="prompt"></div>
            <div>
                <label>账号</label>
                <input type="text" id="personalnewphone" value="15712345678" placeholder="邮箱/手机号" runat="server" />
                <button type="button" id="FqAuthcode" runat="server" >
                    获取验证码
                </button>
            </div>
        </div>
    </form> 

</body>
</html>



(3)引用jquery文档,js编写

<script src="../js/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            //获取验证码
            $("#FqAuthcode").bind("click",function () {


                var _loginname = $("#personalnewphone").val();

                if (_loginname == '') {
                    $('#prompt').removeClass('hidden').addClass('text-danger').html('手机或邮箱不能为空');
                    return false;
                }

               
                //webservice方法
                //要调用的方法的完整路径,WebService命名空间.WebService类名.方法名
                WebApplication1.web.WebService1.GetCode(_loginname,function (data) {
                    //响应成功

                    var json=$.parseJSON(data);//把字符串转成json格式
                    if (json.code == 10000) {
                        $("#sub-btn-Box").removeClass('hidden');
                        $(".personalcode").css("display","block");
                        $('#prompt').removeClass('hidden').addClass('text-danger').html(json.message);
                    } else {
                        $('#prompt').removeClass('hidden').addClass('text-danger').html(json.message);
                    }

                },function () {
                    //响应失败
                    setContainer('Error!');
                });


            });

        });
    </script>

效果如图:


对比:

jQuery调用Handler几乎完美了,但是不能处理多个方法。用webService和ScriptManager,可以调用多个方法。

总结:

有了理论要在实践中去验证,验证过了还要总结成理论。

【Asp.net】 Ajax小例子的更多相关文章

  1. ios – 导航栏下方出现黑条

    解决方法迟到的答案,但我今天偶然发现了这个问题,发现了你的问题,但还没有接受答案.从提示的viewController转到storyboard中的非提示viewController时出现此错误.我就像你一样得到那个黑色的酒吧.并修复:这将在切换viewcontroller之前立即删除提示.UPDATE

  2. ios – MonoTouch Build:ld:未找到架构armv7的符号

    解决方法发现问题:本地库依赖于AddressBook框架,我忘了将它包含在API定义项目的AssemblyInfo.cs中:

  3. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  4. Android 4.x微调器中是否没有提示?

    还是我错过了什么?

  5. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  6. Ajax简单的异步交互及Ajax原生编写

    一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象

  7. Ajax跨域问题的解决办法汇总(推荐)

    本文给大家分享多种方法解决Ajax跨域问题,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧

  8. ajax编写简单的登录页面

    这篇文章主要为大家详细介绍了ajax编写简单登录页面的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. ajax从JSP传递对象数组到后台的方法

    今天小编就为大家分享一篇ajax从JSP传递对象数组到后台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  10. 解决ajax返回验证的时候总是弹出error错误的方法

    这篇文章主要介绍了解决ajax返回验证的时候总是弹出error错误的方法,感兴趣的小伙伴们可以参考一下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部