2010-08-10 4 views
1

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

Есть ли способ узнать, какой тип ответа?

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

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

ответ

2

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

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

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

+0

Ну, жаль, что jQuery не разрешает это при приеме данных, но ваша идея вписывается в мою текущую проблему. Благодарю. – sinuhepop

+0

Ммм, я пробовал, но это не работает ... Я всегда получаю typeof (response) == 'string' ... Я думаю, что подобное, но неуклюжие решение будет пытаться {eval (response);/* json * /} catch (e) {/ * html * /} – sinuhepop

+0

@Sinuhe - третьим параметром для вашего успеха является XmlHttpRequest, попробуйте 'function (resp, status, xhr) {alert (xhr.getResponseHeader (" content -тип")); } 'что вы получаете за JSON vs html? –

2

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

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

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); 
    } 
} 
Смежные вопросы