如何检查ajax响应是否为javascript内容类型?
我有几种不同的形式,每种都返回不同的东西。我需要检测它是一个简单的字符串(这样我就可以把它放在错误/状态区域),还是它的javascript我什么都不做,让它执行 这是我目前正在做的检查,但我想确保这是100%坚固可靠。。。我想不出别的办法 另一个选项是始终使用JSON,但我需要一个JSON垫片,以及尝试将javascript序列化为JSON如何检查ajax响应是否为javascript内容类型?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有几种不同的形式,每种都返回不同的东西。我需要检测它是一个简单的字符串(这样我就可以把它放在错误/状态区域),还是它的javascript我什么都不做,让它执行 这是我目前正在做的检查,但我想确保这是100%坚固可靠。。。我想不出别的办法 另一个选项是始终使用JSON,但我需要一个JSON垫片,以及尝试将javascript序列化为JSON $.ajax({ type: 'POST', url: form.attr('action'), data: form.se
$.ajax({
type: 'POST',
url: form.attr('action'),
data: form.serialize()
})
.done(function(data, textStatus, xhr) {
if (!xhr.getResponseHeader('Content-Type').match(/text\/javascript/i)) {
form.find('.status').text(data).removeClass().addClass('status status-done').slideDown(200);
} else {
// this is where i do nothing and let JS run
}
})
下面的内容是可行的,但我担心在某些边缘情况下它将不起作用(不确定这可能是什么,但重要的是本节100%有效)注意,不确定需求的细节。如果正确地解释问题,在不同的
表单
元素中,是否有不同于$.ajax()
请求的响应类型?a) 检查响应类型字符串
?b) 什么也不做
可能会检查json
响应中的响应类型string
if (typeof data.data === "string") {
// do stuff , with `string`
}
如果$.ajax()
expectjson
response,接收js,可能会立即运行该片段。在下面的一段中,第一个响应是string
,通过if
在.done()处过滤。第二个响应json
对象,其属性为js函数表达式,在$.ajax()
success
textStatus
处立即运行。仍然能够在其他
处检查对象
的响应类型
,但可以作为脚本
运行。请参见控制台上的空xhr.repsonseText
和xhr.reponseJSON
试一试
var url=[[“/echo/json/”,“abc”]
,[“/echo/json/”,
{“abc”:
(函数(){
setTimeout(函数(){
$(“正文”)。附加(“”)
+“对象”+“”);
$(“数据”)
.hide(0)
.fadeIn(1200)},1200)
}())
}]
];
var请求=函数(url,_数据){
$.ajax({
键入:“POST”,
url:url,
数据:{json:json.stringify({“data”:{u data})}
})
.done(函数(数据、文本状态、xhr){
if(type of data.data==“string”){
$(“body”).append(“+data.data+”)
}否则{
console.log(type of data.data
,数据
,xhr.responseText
,xhr.responseJSON);
//这就是我什么都不做,让JS运行的地方
}
})
};
$.each(URL、函数(k、v){
请求(v[0],v[1])
});
JSFIDLE
看
,
为什么需要JSON垫片?您需要支持哪些古老的浏览器?我认为您在这里面临一个XY问题……我建议您仔细阅读ajax数据类型,因为您似乎得到了一些不好的信息。那么,我应该如何区分JSON和application/javascript呢?@Tallboy服务器/应用程序应该响应JSON,或者至少类似于JSON。(除非是。)我知道,但我的问题围绕着。。。让my.done()ajax promise确定响应是application/json(在表单上方显示错误消息)还是。。。application/javascript(不做任何事情,让JS执行。我不想将响应JS注入表单,所以我需要确定内容类型)
var urls = [["/echo/json/","abc"]
, ["/echo/json/",
{"abc":
(function() {
setTimeout(function() {
$("body").append("<div id=data>"
+ "object" + "</div>");
$("#data")
.hide(0)
.fadeIn(1200)},1200)
}())
}]
];
var request = function(url, _data) {
$.ajax({
type: 'POST',
url: url,
data: {json : JSON.stringify({"data":_data})}
})
.done(function(data, textStatus, xhr) {
if (typeof data.data === "string") {
$("body").append("<div>" + data.data + "</div>")
} else {
console.log(typeof data.data
, data
, xhr.responseText
, xhr.responseJSON);
// this is where i do nothing and let JS run
}
})
};
$.each(urls, function(k, v) {
request(v[0], v[1])
});