繁体   English   中英

jQuery:获取Ajax响应的类型

[英]jQuery: get the type of an Ajax response

我需要发出一个Ajax请求,但它的响应可能会有所不同,这是在服务器端决定的。

有什么方法可以知道响应的类型是什么?

它可能看起来类似于:

$.post(url, pars, function (response, type) {
    if (type=='json') ...
    if (type=='html') ...
});

如果您也可以控制服务器端代码,最简单的方法可能是包含一个带有值的参数来指定格式。

这是一个例子,我做了你所描述的相同类型的事情。 我从xml,json或字符串格式返回的数据中加载了一个包含客户值的表,所有这些都是由我的服务器端代码作为format参数返回的值驱动的:

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);
  }
}

没有内置的方法可以做到这一点,它由jQuery.httpData确定并抛弃(注意:它将是1.4.3中的jquery.ajax.httpData )。

虽然您可以查看httpData源并自己运行相同的函数,但这有点浪费,因为jQuery已经这样做了。 一世

如果你的选择只是jsonhtml ,你可以检查typeof response ,它应该是HTML的"string" ,否则你有JSON,你也可以检查并确定,例如: type && type.propertyAlwaysThere

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM