簡體   English   中英

JQuery AJAX調用本地更新腳本在Safari中失敗,可在Chrome和FF中使用

[英]JQuery AJAX calling local update script fails in Safari, works in Chrome and FF

在本地腳本上進行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功能。 提前致謝

在處理$.ajax (或與此相關的任何異步代碼)時,應始終記住: “在……下方”並不意味着“在 …… 之后”

要使$.ajax()調用成功解決后立即執行某些代碼,僅將其寫入$.ajax下是不夠的-實際上,除非它引入了等待塊(如alert一樣),否則其代碼將始終任何ajax回調有機會工作之前被執行。

相反,您應該使用Promise接口(和$.ajax返回的jqXHR對象)提供的方法:

  • .done() ,當成功解決AJAX調用時將觸發
  • .fail() ,當AJAX調用因錯誤而解析時觸發
  • .always() ,無論如何解決AJAX調用(並且.done / .fail方法中指定的所有回調也都已完成)時會觸發該.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'); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM