JSON text/html 不是有效的 MIME 类型

AJAX Asynchronous JavaScript and XML 通过 JavaScriptXML 技术的非同步请求和响应机制。在 AJAX 中可以通过使用 XMLHttpRequest 对象发送非同步请求到服务器,并接收服务器返回的数据,以实现动态更新网页内容的功能、发送 AJAX 请求时,需要指定请求的编码类型,以保证数据能够正确地传输和解析。

使用 AJAX dataType : "jsonp" 由 Class ASP 返回处理程序中出现了一些发者工具警告提示问题。
其网际网路传送的 (Multipurpose Internet Mail Extensions, MIME type) MIME 类型 text/html 不是有效的 JavaScript MIME 类型,仍已加载来自 因为它的 MIME 类型 "text/html" 不是 "text/css"。

var succeSsJSON = function (result) {
  result = JSON.parse(result);
};
$.ajax({
  type: "GET",
  url: "http://127.0.0.1/Update.asp",
  data: {
    doSuite: "Whois-Update",
    parser: location.host,
    varsion: "8.0.00000"
  },
  dataType: "jsonp",
  crossDomain: true,
  jsonpCallback: "JsonpCallback",
  cache: false,
  success: succeSsJSON,
  error: function (jqXHR, textStatus, errorThrown) {}
});

于是在处理程序 Update.asp 中加入 application/javascript

<%
Response.ContentType = "application/javascript"
Response.CharSet = "utf-8"
%>


JSON.parse: bad

另外因为返回处理的资料由 Access 读取,发者工具警告提示。
Uncaught SyntaxError: JSON.parse: bad control character in string literal at line 1 column 11 of the JSON data.

一笔笔检查后原因可能 Access 其栏位记录资料中存在 TAB 的控制字元,导致 JSON.parse 解析的错误。
在处理的字符串文字中如果出现控制字符,例如 \t, \b, \r, \n 低于 ASCII 32 的任何字符容易出现 JSON.parse 错误。

需要再读取记录时先处理文字中出现的 Control Characters 控制字符,包含十六进制 \uXXXX Unicode 编码字符。


JSON.parse(text [, reviver])

text 必要项,有效的 JSON String 字串。
reviver 选择项。用来转换结果的函式。唿叫函式时,针对这个物件的每个成员进行唿叫。成员包含巢状物件,则会先转换巢状物件,然后再转换父物件。使用 JSON.stringify 将阵列转换为 JSON 字串,然后使用 JSON.parse 将字串转换回阵列。



jQuery AJAX contentType 编码类型

jQuery 预设发送时编码类型使用 application/x-www-form-urlencoded;charset=UTF-8 编码类型是 AJAX 预设的编码类型,它通过将表单数据转换成 URL Encoding 编码字元串的方式进行数据传输。但是如果字符集设置 charset=big5 可能变乱码类似 Server.URLEncode 当处理旧版本的 Class ASP 程式问题就很多、Server.URLEncode(String) 但是旧版本 ASP 3.0 接收时无法使用 URLDecode 来处理解码。

考虑方案如果採用 JavaScript 发送参数时先以 window.btoa(unescape(encodeURIComponent(str))) 转换,ASP 3.0 则接收服务器 Server 需要写出 Function 函数相容 window.atob 相当的解码程式,解决乱码问题。编码类型的选择需要根据具体的需求和场景来进行选择,例如如果需要传输大型二进制文件,就应该使用 multipart/form-data 编码类型,如果需要传输 JSON 格式的数据,就应该使用 application/json 编码类型。


encodeURIComponent 编码类型

window.btoa(unescape(encodeURIComponent('编码类型')));  // 57eo56K86aGe5Z6L

经过 Base64 编码后再将 57eo56K86aGe5Z6L 转换回原本 '编码类型' 的文字,虽然没有乱码,但是最好可以重新制作新时代系统 UTF-8 格式,才不会 Nightmare Again And Again 恶梦连连。




ASP.NET 编码 To Encode

将字串进行编码和解码。使用正确的编码方式可以确定数据的正确性和安全性,开发者需要根据具体情况选择适当的编码方式,以方便在网络上传输和存储。

ASP.NET (.ASPX)

ASP.NET 中的 ToBase64String 将指定唯读范围内八位元不带正负号的「整数转换」为使用 Base-64 位数编码的对等字串表示,基于 Base64 编码字串转换方式。Base64 编码为常用的数据编码方式,它将二进制数据转换为 ASCII 字元串,通常用于在网路上传输二进制数据。ToBase64String 方法是 System.Convert 的一部分,可以在 ASP.NET 中使用。接收 byte 位元组的参数,返回 Base64 编码的字符串。使用 ToBase64String 方法可以採用二进制数据和 Text 文字数据之间的转换,在 ASP.NET 应用于数据传输和 Encryption 加密等方面应用。

Convert.ToBase64String(Encoding.UTF8.GetBytes("编码类型"))
Encoding.UTF8.GetString(Convert.FromBase64String("57eo56K86aGe5Z6L="))

主要仍然是使用 IIS (Internet Information Services) 的 Web Server 网站伺服器软体相应的编码方式设定,其资料的传递问题,或是採用 JavaScript Fetch API 资源的接口请求编码类型转换之间的对应。