在不知道dataType的情况下对url进行$ .ajax调用

时间:2014-03-05 20:31:53

标签: javascript jquery ajax json web-services

我正在尝试使用jquery $ .ajax设置对webservices的泛型调用。我希望能够获取原始数据并将其绑定到网格中。

当我知道dataType时,我的调用工作正常,但我想尝试在不知道数据类型的情况下进行ajax调用,特别是找到dataType是什么。

例如,我知道数据类型的ajax调用可能是:

$.ajax({
    type: 'GET',
    crossDomain: true,
    dataType: "jsonp",
    url: 'http://itunes.apple.com/search?term=coldplay',
    success: function (res, status, xhr) {
        //DoStuff;
    },
    error: function (jqXHR, textStatus, errorThrown) {
        //DoStuff
    }
});

但是,如果我在不知道数据类型的情况下发出请求,我只会得到“错误”的响应状态?

我最终希望能够做到的是ping一个返回json,xml或者odata(不太可能)的url(webservice)。由于我不知道哪个,我希望能够简单地调用url一次,以找出我可能会得到什么样的数据,以及有什么内容类型。

我已经尝试过简单地在错误中找回标题中的内容类型,但到目前为止我没有尝试过任何工作或返回任何内容。

$.ajax({
    type: 'GET',
    crossDomain: true,
    url: 'http://itunes.apple.com/search?term=coldplay',
    success: function (res, status, xhr) {
        //DoStuff
    },
    error: function (jqXHR, textStatus, errorThrown) {
        $("#results").html(textStatus + jqXHR.getResponseHeader('Content-Type'));
    }
});

这可以用Jquery完成吗?

修改

我知道这可以(并且在大多数情况下应该)在服务器端完成,并且很可能这最终会发生。但是为了看看我能在多大程度上将网格绑定到数据源客户端而不知道我的dataType,上述问题就诞生了。

感谢所有人。

1 个答案:

答案 0 :(得分:3)

您的方法是合理的,但您要求用户的浏览器从第三方Web服务器获取信息。

  

XMLHttpRequest无法加载http://itunes.apple.com/search?term=coldplay。请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://fiddle.jshell.net”访问。

除非第三方授予您许可,否则Same Origin Policy会阻止您的JavaScript访问有关响应的任何信息。

您应该移动逻辑服务器端。