我之前有幾篇筆記是關於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