jQuery: получить тип ответа Ajax - PullRequest
1 голос
/ 10 августа 2010

Мне нужно сделать запрос Ajax, но его ответ может отличаться, и решение принимается на стороне сервера.

Можно ли узнать, какой тип ответа?

Это может выглядеть примерно так:

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

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Нет встроенного способа сделать это, он определяется и отбрасывается jQuery.httpData (примечание: это будет jquery.ajax.httpData в 1.4.3).

Хотя вы можете взглянуть на источник httpData и запустить те же функции самостоятельно, это немного расточительно, поскольку jQuery уже делает это.I

Если ваш выбор только json или html, вы можете проверить typeof response, это должно быть "string" для HTML, в противном случае у вас есть JSON, который вы также можете проверить и убедиться ва также, например: type && type.propertyAlwaysThere.

2 голосов
/ 10 августа 2010

Если у вас также есть контроль над кодом на стороне сервера, возможно, проще всего будет включить параметр со значением для указания формата.

Вот пример, где я делал то же самое, что вы описываете. Я загрузил таблицу со значениями клиентов из данных, возвращаемых в формате xml, json или string, и все это зависит от значения, которое мой серверный код возвратил в качестве параметра формата:

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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...