Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Jquery 跨域Ajax请求和Spring MVC Rest API仅适用于Safari_Jquery_Rest_Spring Mvc_Safari_Jackson - Fatal编程技术网

Jquery 跨域Ajax请求和Spring MVC Rest API仅适用于Safari

Jquery 跨域Ajax请求和Spring MVC Rest API仅适用于Safari,jquery,rest,spring-mvc,safari,jackson,Jquery,Rest,Spring Mvc,Safari,Jackson,我有两个不同的项目,其中web应用程序需要访问服务器端的一些RESTAPI。因此,我在服务器端用JacksonMapper设置了一个springmvcrestapi,在客户端用Jquery.ajax设置了JSONP请求,效果很好 然而,我发现Safari版本6.0.5在Rest API上显示JSON响应,其中包含GET请求和contenType JSON,而没有回调,而所有其他浏览器都会失败。出于好奇,有人能解释一下这是怎么可能的吗 请求如下: $.ajax({ type: "GET",

我有两个不同的项目,其中web应用程序需要访问服务器端的一些RESTAPI。因此,我在服务器端用JacksonMapper设置了一个springmvcrestapi,在客户端用Jquery.ajax设置了JSONP请求,效果很好

然而,我发现Safari版本6.0.5在Rest API上显示JSON响应,其中包含GET请求和contenType JSON,而没有回调,而所有其他浏览器都会失败。出于好奇,有人能解释一下这是怎么可能的吗

请求如下:

$.ajax({
    type: "GET",
    dataType: "json",
    url: url,
    data: {
        origin: start.toUrlValue(6),
        destination: dest.toUrlValue(6)
    },

    success: function (data) {          
        console.log(data);
        var res = JSON.stringify(data); //json to string
        $('#result').text(res);
    },

    error : function(jqXHR, textStatus, errorThrown) {
        alert("Request failed: " + textStatus);
        console.log(JSON.stringify(jqXHR));
    },
 });
更新
澄清问题。请求到达API,我可以看到,服务器正在进行工作并发送JSON响应。我只是无法在任何其他浏览器中处理响应。

我不认为API有任何问题

相反,很可能不是所有浏览器都支持用于将数据发送到API的函数

您可能并不总是获得url变量的值 您可能并不总是使用.toUrlValue方法
使用firefox中的firebug,您可以检查从请求发送的POST参数。确保不同浏览器之间的POST数据没有差异。

在控制台中查看失败的GET请求的错误代码和消息。上面说什么?没有多少。它只显示{readyState:0,responseText:,status:0,statusText:error}所以,对于所有浏览器,您都会得到一个200状态代码和一个json对象作为响应?这实际上是个好主意。然而,我甚至在请求中用参数对URL进行了硬编码。在服务器端,我可以看到API被很好地调用,它开始做一些工作并返回响应。除了Safari,我无法使用任何其他浏览器处理响应。您的API是否具有调试模式?如果是这样的话,打开它,并在发生任何事情时进行检查。如果还没有编写php日志,也要熟悉编写php日志。这就像在JS中编写控制台时一样。是的,我在SpringRESTAPI上使用了一个记录器,它显示无论请求来自哪个浏览器,响应看起来都完全相同。我认为这一定与跨域有关,而且可能与浏览器之间的安全性差异有关?如果您确实在所有浏览器中都得到了JSON响应,那么您的回调函数中就存在一些问题。