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

时间:2014-08-30 23:30:04

标签: javascript jquery ajax

我有几种不同的形式,每种形式都会返回不同的东西。我需要检测它是否是一个简单的字符串(所以我可以将它放在错误/状态区域)或者如果它的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%工作)

1 个答案:

答案 0 :(得分:0)

注意,不确定要求的细节。如果正确解释问题,在form个不同的元素,来自$.ajax()请求的不同响应类型? a)检查响应类型string? b)什么都不做?

可以使用

检查string响应中的响应类型json
if (typeof data.data === "string") { 
  // do stuff , with `string`
}

如果$.ajax()期望json响应,则接收js,可以立即运行该作品。在下面的部分中,第一个回复是string,在if处通过.done()进行过滤。第二个响应json对象具有js函数表达式作为属性,它似乎立即在$.ajax() success textStatus运行。仍然能够检查type处的object的回复else,但是script。请参阅xhr.repsonseText

处的空xhr.reponseJSONconsole

尝试

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

jsfiddle http://jsfiddle.net/guest271314/y9b7t740/

jQuery getScript() vs document.createElement('script')script.js

Calling a JavaScript function returned from an Ajax response

jQuery: Evaluate script in ajax response

What is JSONP all about?