0

在本地脚本上进行 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 功能。提前致谢

4

1 回答 1

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'); });
于 2013-09-16T23:28:55.627 回答