代码之家  ›  专栏  ›  技术社区  ›  sinuhepop

jQuery:获取Ajax响应的类型

  •  1
  • sinuhepop  · 技术社区  · 15 年前

    有没有办法知道反应是什么类型的?

    $.post(url, pars, function (response, type) {
        if (type=='json') ...
        if (type=='html') ...
    });
    
    2 回复  |  直到 13 年前
        1
  •  2
  •   Nick Craver    15 年前

    没有什么内在的方法可以做到这一点,它是由我们自己决定并抛弃的 jQuery.httpData (注:将 jquery.ajax.httpData 第1.4.3节)。

    尽管您可以查看httpData源并自己运行相同的函数,但这有点浪费,因为jQuery已经在做了。我

    如果你的选择只是 json html ,你可以查一下 typeof response ,应该是 "string" type && type.propertyAlwaysThere

        2
  •  2
  •   Jeffrey Blake    15 年前

    如果您还可以控制服务器端代码,那么最简单的方法可能是包含一个参数,该参数的值用于指定格式。

    function checkCusts(id, format, resultRegion) {
      var address = "cust-lookup.jsp";
      var data = "cust_id_list=" + getValue(id) + "&format=" + format;
    
      if (address != "") {
        ajaxPost(address, data,
        function(request) {
          parseCustomers(request, format, resultRegion);
        });
      }
    }
    
    function parseCustomers(request, format, resultRegion) {
      if ((request.readyState == 4) && (request.status == 200)) {
        var headings = new Array("Customer ID", "First Name", "Last Name", "Balance");
        var rows = null, customers = null;
    
        if ("xml" == format) {
          var xmlDocument = request.responseXML;
          customers = xmlDocument.getElementsByTagName("customer");
          rows = new Array(customers.length);
          var subElementNames = ["cust_id", "first_name", "last_name", "balance"];
          for (var i=0; i<customers.length; i++) {
            rows[i] = getElementValues(customers[i], subElementNames);
          }
        } else if ("json" == format) {
          var rawData = request.responseText;
          var data = eval("(" + rawData + ")");
          rows = data.customers;
        } else if ("string" == format) {
          var rawData = request.responseText;
          var rowStrings = rawData.split(/[\n\r]+/);
          rows = new Array(rowStrings.length -1);
          for (var i=1; i<rowStrings.length; i++) {
            rows[i-1] = rowStrings[i].split("#");
          }
        }
    
        var table = getTable(headings, rows);
        htmlInsert(resultRegion, table);
      }
    }