解決一個我之前沒有解決的問題[後台編碼ajax請求的內容,前台js解碼]

來源:互聯網
上載者:User

我之前有幾篇筆記是關於ajax請求後,返回的資料有特殊字元後階段字元報錯的問題! 如返回內容有 單引號,雙引號etc! 他們會截取字串,致使json格式不正確而報錯! 而之前我一直用的是很瓦塔的方法:name.Replace("'", "%27").Replace("\"", "%22")! 今天我將更在這種做法!

核心代碼:  string json = "{Id:1,Name:\"" + Microsoft.JScript.GlobalObject.escape(name) + "\",Sex:\"male\"}";

Microsoft.JScript.GlobalObject:這裡類裡面有許多和前台js對應的方法! 如:decodeURI,encodeURIComponent etc !感興趣的自己看看

1.首先項目引用Microsoft.JScript類庫!

2.後台使用:Microsoft.JScript.GlobalObject.escape(name)

3.前台使用:unescape(s.Name);

page:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><body>    <form id="form1" runat="server">    <asp:ScriptManager ID="ScriptManager1" runat="server">    </asp:ScriptManager>    <script type="text/javascript">        function GetJson() {            var xmlHttp;            try {                // Firefox, Opera 8.0+, Safari                xmlHttp = new XMLHttpRequest();            }            catch (e) {                // Internet Explorer                try {                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");                }                catch (e) {                    try {                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");                    }                    catch (e) {                        alert("您的瀏覽器不支援AJAX!");                        return false;                    }                }            }            xmlHttp.onreadystatechange = function() {                if (xmlHttp.readyState == 4) {                    //alert(xmlHttp.responseText);                    var str = xmlHttp.responseText;                    alert(str);                    //$get("divShow").innerHTML = xmlHttp.responseText;                    //eval('var s = {"id":1}');                    //eval("var s = "+xmlHttp.responseText+")";                    // s = { "id": 1 };                    try {                        eval("var s = " + str);                        alert("sex:" + unescape(s.Sex) + "\r\nname:" + unescape(s.Name));                    } catch (e) {                        alert(e.message)                    }                }            }            var data = "id=1";            xmlHttp.open("POST", "default.aspx?ajax=true", true);            xmlHttp.send(data);        }</script>           <center>    <div style="color:Red">    Test    <input type="button" value="GetJson" onclick="GetJson();" />    <div id="divShow"></div>    </div></center>    </form></body></html>
using Microsoft.SharePoint;using System.Diagnostics;using System.Data;//注意項目需要添加引用:Microsoft.JScript類庫public partial class _Default : System.Web.UI.Page {    protected void Page_Load(object sender, EventArgs e)    {        if (IsPostBack) return;        if (!string.IsNullOrEmpty(Request.QueryString["ajax"]))        {            string name = "hao'jiang\"fesd";            string sex = "sex'you\"lok";            //1.string json = "{Id:1,Name:\"" + Server.UrlEncode(name) + "\",Sex:\"male\"}";            string json = "{Id:1,Name:\"" + Microsoft.JScript.GlobalObject.escape(name) + "\",Sex:\"" + Microsoft.JScript.GlobalObject.escape(sex) + "\"}";            /**             * 抱歉,由於之前我沒有解決這個問題,一直用的很不是辦法的辦法:string json = "{Id:1,Name:\"" + name.Replace("'", "%27").Replace("\"", "%22") + "\",Sex:\"male\"}";             * 但是使用這種方法,我心裡一直有陰影[哈哈!],我總是千方百計的去google找答案!終於黃天不負有心人!被我找到了!我認為該方法較好!             *              * */            Response.Write(json);            /*             * 注意:如果你ajax提交的頁面為 aspx,那麼你在Response.Write("")之後還需要             * Response.End();不然你把你需要的字元列印出來了,接著還會把頁面的HTML列印出             * 來,以前我不知道,沒有執行Response.End(),xmlhttprequest.responseText取出來             * 還需要截取字元才對啊!             * 所以每次記得 調用Response.End();感興趣的話,把Response.End();注釋掉試一試!             * */            Response.End();        }    }

}

下面這篇也有這個問題我之前沒有解決!

AJAX提交到Handler.ashx一般處理常式返回json資料

 

 

Technorati 標籤: ajax,asp.net

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.