首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

AJAX 傳遞含引號字串導致 JSON 解析失敗:正確轉義方案

     編輯:程式設計綜合問答

問題

`selectedText` 含單引號或雙引號時,手動拼接 JSON 字串導致格式錯誤,`data: "{'s':'" + selectedText + "'}"` 或 `data: "{ \"s\":\""+ selectedText+"\" }"` 皆會斷裂。

正確做法:讓 jQuery 自動序列化

$.ajax({
    type: "POST",
    url: "Reader.aspx/GetStr",
    data: { s: selectedText }, // 關鍵:傳物件,jQuery 自動 JSON.stringify
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) { ... },
    error: function(err) { alert("data error"); }
});

若必須手動構建 (不推薦)

// 使用 JSON.stringify 確保合法轉義
var payload = JSON.stringify({ s: selectedText });
$.ajax({
    data: payload,
    contentType: "application/json; charset=utf-8",
    ...
});

手動轉義正則 (極不推薦)

data: '{"s":"' + selectedText.replace(/"/g, '\\"').replace(/'/g, "\\'") + '"}'

後端接收

ASP.NET WebMethod 自動反序列化 JSON 到參數:

[WebMethod]
public static string GetStr(string s) {
    // s 已正確解碼,含原始引號
    return Process(s);
}

關鍵點總結

  1. 永遠用物件傳 `data`**,讓 `JSON.stringify` 處理轉義。
  2. 設定 `contentType: "application/json"`** 告知伺服器內容類型。
  3. 不要手動拼接 JSON 字串**,極易出錯且難維護。
  4. 若 `selectedText` 來自使用者輸入,**前端驗證長度、字元集**,後端同樣驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved