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