2

我的 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 次)它不会返回任何回调。

我发现了很多关于Not working ajax in Safari but fine in chrome and FireFox 的问题和答案。我的问题与他们不同,因为大多数时候都很好(我并不是说它通常不好,因为当我刷新浏览器时,这可能会导致我的 ajax 调用工作)。

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

更新:

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

4

5 回答 5

4

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

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

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

于 2013-09-13T09:37:58.213 回答
2

我也遇到了这个问题。

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

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

只需重命名它,所有东西都会运行。

于 2016-03-10T11:11:56.260 回答
1

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

在你的情况下:

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
});
于 2013-09-16T06:12:45.663 回答
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());
});

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

于 2013-09-13T09:39:00.047 回答
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());
});
于 2013-09-13T06:23:26.627 回答