【问题标题】:JQuery Ajax call often not working on Safari 6JQuery Ajax 调用通常不适用于 Safari 6
【发布时间】:2013-09-13 05:17:54
【问题描述】:

我的 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);没有执行。当我不想刷新浏览器时,我多次单击页面链接以产生结果。会迟到吗?

【问题讨论】:

  • 我的问题不会出现在 chrome 和 firefox 中。经常在 Safari 中 :(。我真的很想知道为什么?
  • 如果您真的不明白我的意思,请不要将其定义为重复。
  • 和我描述的例子代码一样。不要以为我使用的是完整的代码。
  • 我找到了一个,Safari没有通过我页面的锚链接重新加载js文件。
  • 真的需要刷新才能重新调用js文件..为什么?

标签: ajax jquery safari


【解决方案1】:

最后,我发现了错误。即使禁用缓存,Safari 也不会再次重新加载我的 JavaScript 文件。所以我把我所有的JS代码都放到了:

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

当我的页面准备好时重新加载我的 JS 文件。加油!

【讨论】:

    【解决方案2】:

    我也遇到过这个问题。

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

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

    只要重命名,一切都会运行。

    【讨论】:

      【解决方案3】:

      这似乎是 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
      });
      

      【讨论】:

        【解决方案4】:

        请测试以下代码。它工作正常。

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

        【讨论】:

        • 当我添加 contentType: "application/json; charset=utf-8" 时,在我的代码中生成加载资源失败:服务器响应状态为 400(错误请求)。
        • url:'@Url.Action("getResult","Controller")',它的定义是什么以及如何在其中传递我的url。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 2015-01-16
          • 1970-01-01
          • 2018-04-14
          相关资源
          最近更新 更多