我需要發出Ajax請求,但其響應可能會有所不同,並且會在服務器端決定。jQuery:獲取Ajax響應的類型
有什麼方法可以知道響應是什麼類型?
它可能類似於:
$.post(url, pars, function (response, type) {
if (type=='json') ...
if (type=='html') ...
});
我需要發出Ajax請求,但其響應可能會有所不同,並且會在服務器端決定。jQuery:獲取Ajax響應的類型
有什麼方法可以知道響應是什麼類型?
它可能類似於:
$.post(url, pars, function (response, type) {
if (type=='json') ...
if (type=='html') ...
});
有沒有內置的方式做:我裝客戶值的表從XML,JSON或字符串格式返回的數據,全部由我的服務器端代碼返回格式參數的值驅動這是由jQuery.httpData
(注意:它將在1.4.3中的jquery.ajax.httpData
)確定並扔掉。
雖然你可以看看httpData源碼並自己運行相同的函數,但這有點浪費,因爲jQuery已經這樣做了。我
如果你的選擇是隻json
或html
,你可以檢查typeof response
,它應該是爲"string"
HTML,否則,你JSON,你也可以查看並確認一下爲好,例如:type && type.propertyAlwaysThere
。
如果您在服務器端代碼的控制,以及,最簡單的事情很可能會包括一個值的參數,以指定格式。
下面是一個例子,我描述了相同類型的東西。
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不允許這在數據接收,但你的想法適合我目前的問題。謝謝。 – sinuhepop 2010-08-10 00:44:51
嗯,我試過了,但它不起作用......我總是得到typeof(response)=='string'...我認爲類似但笨拙的解決方案將嘗試{eval(response);/* json * /} catch(e){/ * html * /} – sinuhepop 2010-08-10 00:56:26
@Sinuhe - 您的成功的第三個參數是XmlHttpRequest,嘗試'函數(resp,status,xhr){alert(xhr.getResponseHeader(「content -類型」)); }'你對JSON和html有什麼要求? – 2010-08-10 00:58:15