Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查ajax响应是否为javascript内容类型?_Javascript_Jquery_Ajax - Fatal编程技术网

如何检查ajax响应是否为javascript内容类型?

如何检查ajax响应是否为javascript内容类型?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有几种不同的形式,每种都返回不同的东西。我需要检测它是一个简单的字符串(这样我就可以把它放在错误/状态区域),还是它的javascript我什么都不做,让它执行 这是我目前正在做的检查,但我想确保这是100%坚固可靠。。。我想不出别的办法 另一个选项是始终使用JSON,但我需要一个JSON垫片,以及尝试将javascript序列化为JSON $.ajax({ type: 'POST', url: form.attr('action'), data: form.se

我有几种不同的形式,每种都返回不同的东西。我需要检测它是一个简单的字符串(这样我就可以把它放在错误/状态区域),还是它的javascript我什么都不做,让它执行

这是我目前正在做的检查,但我想确保这是100%坚固可靠。。。我想不出别的办法

另一个选项是始终使用JSON,但我需要一个JSON垫片,以及尝试将javascript序列化为JSON

  $.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()
expect
json
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])
    });