【问题标题】:JQuery AJAX calling local update script fails in Safari, works in Chrome and FFJQuery AJAX 调用本地更新脚本在 Safari 中失败,在 Chrome 和 FF 中有效
【发布时间】:2013-09-17 07:28:55
【问题描述】:

在本地脚本上进行 AJAX 调用以使用 POST 更新 dbase。错误报告并没有给我太多继续。适用于 IE、Chrome 和 FF,但不适用于 Safari 6。其他 JQuery 功能正在 Safari 中运行,Firebug DOM 选项卡显示 JQuery 具有。这是 AJAX 代码块。

$.ajax({
    type: "POST",
    url: "updatead3.php",
    data: {pos_data: dd_elm},   //index array created earlier
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
}).done (function(data) {
    if(console && console.log) {
       console.log("AJAX success: " + data);
    }
}).fail(function(obj,status,error) {
     alert("AJAX Error:" + obj.error);
});

alert("Changes were saved!");
location.reload();
)};
)}:

在 Firebug 脚本选项卡 > 检查 jquery-1.9.1.js 菜单选项下,正在显示“拒绝访问受限 URI”。但如果这是一个跨域问题,我不会期望任何 JQuery 功能。 提前致谢

【问题讨论】:

  • Safari Javascript 控制台有问题吗?
  • 嗨,不,控制台中没有 javascript 错误。
  • 页面显示一组图像和文本元素,它们的位置在数据库中定义。重新加载是为了让进程获取新元素位置的更新值。
  • 将代码直接放在$.ajax() 下不会使其在 AJAX 调用完成后运行。但是,将代码放在$.ajax().always(function(){}) 中。我实际上希望您使用后者。 )
  • @raina77ow,成功了。如果您将其添加为答案,我会接受。感谢您的帮助!

标签: javascript php jquery css ajax


【解决方案1】:

在处理$.ajax(或与此相关的任何异步代码)时,应始终记住:'below' 并不意味着 'after'

要在$.ajax() 调用成功或失败后立即执行某些代码,仅将其写入$.ajax 是不够的 - 实际上,除非它引入了等待块(如alert 那样),它的代码将始终在任何 ajax 回调有机会工作之前执行

您应该使用Promise 接口(和jqXHR 对象,由$.ajax 返回)提供的方法:

  • .done(),在成功解析 AJAX 调用时触发
  • .fail(),当 AJAX 调用被错误解析时触发
  • .always(),当 AJAX 调用无论如何都被解析时触发(并且所有在 .done/.fail 方法中指定的回调也已完成)。

在这种特殊情况下,您会在 AJAX 调用仍在处理时触发页面的重新加载。首先,这对于某些浏览器来说是令人困惑的,实际上在大多数情况下,这会阻止您正确处理 AJAX 的结果。

应该做的是将代码放入$.ajax().always()回调:

$.ajax({ some: 'settings'})
 .done(function() { console.log('SUCCESS :)'); })
 .fail(function() { console.log('FAIL :('); })
 .always(function() { console.log('Doh, I\'m fired anyway'); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2015-12-26
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多