首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 原生 JS 與 jQuery 呼叫 Generic Handler (ashx) 的差異比較

     編輯:ASP.NET 基礎

前端呼叫 .ashx 處理 AJAX 請求時,可使用原生 XMLHttpRequest 或 jQuery 封裝方法。本文對比兩種寫法,說明參數傳遞、回應處理、錯誤捕捉差異。

原生 JavaScript (XMLHttpRequest)

var xhr = new XMLHttpRequest();
var cartId = document.getElementById("txtCartId").value;
var count = document.getElementById("txtCount").value;
var url = "Controls/gengCart.ashx?CartID=" + encodeURIComponent(cartId) 
        + "&count=" + encodeURIComponent(count);

xhr.open("GET", url, true); // 非同步
xhr.setRequestHeader("If-Modified-Since", "0"); // 防止 IE 快取 GET 請求

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            var result = xhr.responseText;
            try {
                var json = JSON.parse(result); // 建議用 JSON.parse,避免 eval 風險
                alert(json.name);
            } catch (e) {
                console.error("JSON 解析失敗", e);
            }
        } else {
            console.error("請求失敗", xhr.status);
        }
    }
};
xhr.send(null);

jQuery AJAX

$.ajax({
    url: 'Controls/Cart.ashx',
    type: 'POST', // 或 GET
    data: {
        productID: <%= GetID %>,
        count: 1,
        userID: '<%= uid %>'
    },
    dataType: 'json', // 自動解析 JSON 回應
    success: function (data, textStatus, jqXHR) {
        if (data === "success" || data.success) {
            window.location = "gwc.aspx?uid=" + '<%= uid %>';
        } else if (data === "false" || data.error) {
            alert("請先登入");
        }
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.error("AJAX 錯誤", textStatus, errorThrown);
    }
});

比較表

特性原生 XMLHttpRequestjQuery $.ajax
程式碼量較多,需手動處理狀態、標頭、編碼簡潔,鏈式呼叫、預設值豐富
JSON 解析手動 JSON.parsedataType: 'json' 自動
錯誤處理需檢查 readyState、status統一 error 回呼
快取控制手動設定標頭cache: false 參數
FormData 支援手動建構processData: false, contentType: false 直接傳 FormData
Promise/async-await需自行封裝回傳 jqXHR (Promise-like),可 await $.ajax(...)
跨瀏覽器現代瀏覽器一致,IE6/7 需 ActiveXObject內建處理 IE 相容

Handler 端接收參數

public void ProcessRequest(HttpContext context)
{
    // GET 參數
    string cartId = context.Request.QueryString["CartID"];
    // POST 參數
    string productId = context.Request.Form["productID"];
    // 統一取值 (QueryString + Form)
    string count = context.Request["count"];

    // 回傳 JSON
    context.Response.ContentType = "application/json";
    context.Response.Write("{\"name\":\"Test\"}");
}

建議

  • 專案已引用 jQuery → 直接使用 $.ajax 或 $.post/$.get 簡化代碼。
  • 無 jQuery 環境(如輕量頁面、Worker) → 使用 fetch API(現代瀏覽器)或 XMLHttpRequest。
  • 永遠使用 encodeURIComponent 編碼 URL 參數,防止特殊字元錯誤。
  • 回傳 JSON 設定 Content-Type: application/json,前端 dataType: 'json' 自動解析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved