jquery ajax,ashx,json用法小結

來源:互聯網
上載者:User

jquery提供的簡化版的ajax調用方法通常如下:

function post() {
    $("#divWait").show();
    $("#btnPost").attr("disabled", "disabled");
    $.post("../PostIt.ashx",
                    {
                        msgContent: $("#msgContent").val()
                    },
                    function (data) {
                        if (data.indexOf('OK') > -1) {
                            alert(data);
                        }
                        else {

                        }
                        $("#divWait").hide();
                        $("#btnPost").attr("disabled", "");
                    });
}

在開發的時候,要接受json格式的傳回值時,上面的方法貌似不能行,上面的方法貌似接受的是text的文本行。因此,採用jQuery的底層Ajax實現方法。

該方法參數也很多,具體可看協助文檔。本人的常規用法

function doPostAjax(){
            $("#divWait").show();
            $("#btnPost").attr("disabled", "disabled");
            $.ajax({
                url: '../PostIt.ashx',
                type: 'POST', 
                dataType: 'json', 
                data: { msgContent: $("#msgContent").val() },
                timeout: 60000,
                error: function (XMLHttpRequest, textStatus, errorThrown) {//請求錯誤 時執行的方法
                    alert("error!" + errorThrown);
                    $("#divWait").hide();
                    $("#btnPost").attr("disabled", "");
                },
                success: function (data, txtSataus) {//請求成功時執行的方法
                    showContent(data.content, data.createdate);
                    $("#divWait").hide();
                    $("#btnPost").attr("disabled", "");
                }

            });
        }

 

在ashx程式碼片段,要設定好返回的格式。

context.Response.ContentType = "application/json";

如果是返回的html或者text的話可以如下寫法

context.Response.ContentType = "text/plain";

 如果ajax方法中設定的傳回值是json時,ashx代碼返回的格式必須是json格式的資料。

把一個對象轉換成json格式,常用方法就是採用開源的第三方類庫json.net,Newtonsoft.Json.dll.

JsonConvert.SerializeObject方法就可以轉換了。返回json格式後,jquery就可以採用XXX.xxx的方式擷取值了。

JsonConvert在處理datetime格式的時候,會返回類似1198908717056的絕對值,因此,在處理datetime的時候,要做一下轉換。具體語句如下:

IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();          
//這裡使用自訂日期格式,如果不使用的話,預設是ISO8601格式           
timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter);

此處順便提一下,javascript對json格式的資料有著天生的處理能力,非常好的相容json格式資料。

舉個例子:

function pppp() {
           var person = { "name": "jack", "age": 24,"sex": true };
           alert(person.name);
           alert(person.age);
           alert(person.sex);
           }

這樣的代碼可以直接寫出來,在vs2010的代碼編輯器中還可以有代碼提示。很強大。

ashx完整代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace nnn
{
    /// <summary>
    /// PostIt 的摘要說明
    /// </summary>
    public class PostIt : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            try
            {
                string msgContent = context.Request["msgContent"] ?? "";
                ModelContent m = new ModelContent()
                {
                    author = "",
                    categoryid = -1,
                    title = "",
                    content = msgContent,
                    datetime = DateTime.Now,
                    key = "",
                    createdate = DateTime.Now,
                    lastmodifydate = DateTime.Now,
                    ip = context.Request.UserHostAddress

                };

                //BLLContent bll = new BLLContent();
                //bll.Add(m);

                IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();         
                //這裡使用自訂日期格式,如果不使用的話,預設是ISO8601格式          
                timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
                string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter);
                context.Response.Write(output);
            }
            catch (Exception ex)
            {
                context.Response.Write(ex.Message);
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

本文出自 “一隻部落格” 部落格,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/695900

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.