【问题标题】:ajax inconsistent on SafariSafari上的ajax不一致
【发布时间】:2015-12-18 00:34:06
【问题描述】:

-编辑-

我尝试使用error: function(jqXhr, status, error) 为失败的函数添加一些错误处理,但jqXhr.responseText 是空的,所以我想我仍然没有正确处理错误。

-/编辑-

我是 ajax 新手,必须使用这两个现有 ajax 函数修改现有站点,这两个函数在 Chrome、IE 和 FF 中都可以正常工作,但只有第一个在 Safari 中有效。第二个失败,但错误处理程序(我猜没有正确设置?)并没有告诉我太多:

// works in each browser
$.ajax({
    cache: false,
    type: 'GET',
    url: apiBaseUrl + 'GetCountries',
    dataType: 'xml',
    success: parseCountries,
    error: function(){
        $('.errorMessage').append('<p>' + errorMessage + '</p>');
    }
});

// does not work in Safari
$.ajax({
    cache: false,
    type: 'GET',
    url: apiBaseUrl + 'GetStandardTexts?page=login',
    dataType: 'xml',
    success: displayRegisteredAlert,
    error: function(jqXhr, status, error){
        var err = eval("(" + jqXhr.responseText + ")"); 
        alert(err.Message);    
    }  
});

我可以看到它们之间唯一真正的区别是第二个包含的 URL 和附加参数 ?page=login

【问题讨论】:

  • 在第一个 ajax 中,有 "cache: false" 定义,您是否也尝试将其添加到第二个 ajax 调用中?
  • 另外,第二次ajax调用成功时调用的函数“displayRegisteredAlert”是否真的定义了?
  • 是的,并且在 Safari 以外的其他浏览器上调用 OK。
  • 第二个函数似乎有语法错误 - 您需要在函数的结束括号 (");") 之前添加另一个右大括号 ("}")。
  • 这是我更改错误处理程序时引入的错字 - 现在已编辑。

标签: javascript ajax safari cross-browser


【解决方案1】:

我终于让它工作了。我不完全确定为什么,但添加 async:false 为 Safari 解决了这个问题。其他浏览器不需要。

$.ajax({
    async: false,  // only required on Safari
    cache: false,
    type: 'GET',
    url: apiBaseUrl + 'GetStandardTexts?page=login',
    dataType: 'xml',
    success: displayRegisteredAlert,
    error: function(jqXhr, status, error){
    var err = eval("(" + jqXhr.responseText + ")"); 
    alert(err.Message);    
  }  
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多