我需要发出一个Ajax请求,但它的响应可能会有所不同,并且在服务器端决定。
有没有办法知道响应的类型是什么?
它可能类似于:
$.post(url, pars, function (response, type) {
if (type=='json') ...
if (type=='html') ...
});
答案 0 :(得分: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);
}
}
答案 1 :(得分:2)
没有内置的方法来执行此操作,它由jQuery.httpData
确定并抛弃(注意:它将在1.4.3中为jquery.ajax.httpData
。)
虽然你可以看看httpData源并自己运行相同的函数,但这有点浪费,因为jQuery已经这样做了。我
如果您的选择仅为json
或html
,则可以检查typeof response
,对于HTML应该是"string"
,否则您有JSON,您也可以检查并且也要确定,例如:type && type.propertyAlwaysThere
。