jQuery:获取Ajax响应的类型

jQuery:获取Ajax响应的类型

问题描述:

我需要发出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已经这样做了。我

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

+0

嗯,这是一个可惜的jQuery不允许这在数据接收,但你的想法适合我目前的问题。谢谢。 – sinuhepop 2010-08-10 00:44:51

+0

嗯,我试过了,但它不起作用......我总是得到typeof(response)=='string'...我认为类似但笨拙的解决方案将尝试{eval(response);/* json * /} catch(e){/ * html * /} – sinuhepop 2010-08-10 00:56:26

+0

@Sinuhe - 您的成功的第三个参数是XmlHttpRequest,尝试'函数(resp,status,xhr){alert(xhr.getResponseHeader(“content -类型”)); }'你对JSON和html有什么要求? – 2010-08-10 00:58:15

如果您在服务器端代码的控制,以及,最简单的事情很可能会包括一个值的参数,以指定格式。

下面是一个例子,我描述了相同类型的东西。

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