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

时间:2013-09-13 05:17:54

标签: ajax jquery safari

我的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(“请求URL”+ reqUrl); 没有执行。当我不想刷新浏览器时,我在页面的链接上多次单击以生成结果。执行会迟到吗?

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

我也遇到了这个问题。

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这用于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());
});

如果您还有问题,请在此处发布完整代码。我会尽快测试和回复

答案 4 :(得分:0)

这似乎是一个Safari问题。在this post中,建议在您的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
});