JQuery Ajax调用通常不适用于Safari 6

我的Ajax调用非常简单,如下所示:

function ajax(reqUrl, params , callback) { console.log("Request URL "+reqUrl); var cond; cond = $.ajax({ type: 'post', url: reqUrl, data: params, error:function(){ alert("some error occurred") }, success: callback }); console.log("Server response "+cond.readyState); } // Call it as var url = "/getResult"; var params = {}; params.param1 = "test1"; params.param2 = "test2"; ajax(url, params, function(returnCallback) { console.log(returnCallback); alert("Success"); }); 

在大多数情况下,这样做很好。 但有时(3次中大约1次)它不会返回任何回调。

我发现很多问题和答案在Safari中不工作ajax但在chrome和FireFox中很好 。 我的问题与它们不同,因为它在大多数情况下都很好 (我并不是说它通常不好,因为当我刷新浏览器时,这可能会导致我的ajax调用工作)。

我的主要问题是为什么我的ajax调用有时会失败? 我的JS控制台上没有任何错误。 在这种情况下,我刷新浏览器以获取我的ajax调用。 有任何想法吗?

更新:

我发现有时候我的ajax调用方法没有调用,因为console.log(“Request URL”+ reqUrl); 没有执行。 当我不想刷新浏览器时,我在页面的链接上多次单击以生成结果。 执行会迟到吗?

最后,我发现错误.. Safari不会再次重新加载我的JavaScript文件,甚至禁用缓存。 所以我将所有的JS代码放入:

 $(document).ready(function(){ // start load my js functions init(); }); 

我的页面准备好后重新加载我的JS文件。 干得好!

我也遇到了这个问题。

当我将所有代码移动到$(function() {}) ,它起作用了。

之后,我发现我已经定义了一个名为key的变量,这导致了问题。

只需将其重命名,所有内容都将运行。

请在下面的代码测试。 它工作正常。

 $.ajax({ type: "POST", url:'@Url.Action("getResult","Controller")', data: "{userName :'" + userName + "',password :'" + password + "' }", contentType: "application/json; charset=utf-8", dataType: "html", success: function (data) { alert("here" + data.toString()); }); 

这用于MVC应用程序。

 $.ajax({ type: "POST", url:'getResult', data: "{userName :'" + userName + "',password :'" + password + "' }", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { alert("here" + data.toString()); }); 

对于Asp.net应用程序:

 $.ajax({ type: "POST", url:'getResult', data: "{userName :'" + userName + "',password :'" + password + "' }", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { alert("here" + data.toString()); }); 

如果你还有问题,请在这里发布你的完整代码。 我会尽快测试和回复

这似乎是一个Safari问题。 在这篇文章中,有一个建议是在你的ajax请求中添加一个beforeSend。

在你的情况下:

 cond = $.ajax({ type: 'post', url: reqUrl, data: params, beforeSend: function (event, files, index, xhr, handler, callBack) { $.ajax({ async: false, url: 'closeconnection.php' // add path }); }, error:function(){ alert("some error occurred") }, success: callback });