首页 > 解决方案 > jQuery Ajax 不在 Safari 上发布

问题描述

我正在开发一个项目,其中在 jQuery AJAX 请求之后确定了 DOM 的一部分。该代码在 Google Chrome、Mozilla Firefox 甚至 Edge 中运行良好。所有(据我所见)现代版本的 Safari 都会出现这个问题。

似乎该请求根本没有在 Safari 上完成 - 但它没有引发任何错误,因此页面上的其他 JavaScript(不涉及 POST/GET 请求)按预期工作。控制台也没有任何错误。

下面是我用来发出其中一个请求的代码:

$(document).ready(function(){
   $.ajax({
      type: 'POST',
      url: '/include/userbar.php',
      async: false,
   }).done(function(data){
      if(data.replace('Invalid Permissions') == data){
         $('#userBarContain').html(data);
      } else {
         $.ajax({
            type: 'POST',
            url: '/include/guestbar.php',
            async: false
         }).done(function(data){
            $('#userBarContain').html(data);
         });
       }
});

基本上,我们会执行 AJAX 请求$(document).ready(),如果返回的数据是Invalid Permissions错误的,我们会针对guestbar.php. 无论我们发布到哪里,我们都会将返回的数据放入$('#userBarContain')DOM 元素中。

在 Safari 中,我没有看到成功或后备数据被插入到 DOM 中。我读到 Safari 并不总是能很好地处理async请求,但即使async: false我看到了同样的问题。

编辑:在访问现代 Macbook 后,我发现它实际上是我在其他地方使用的 CSS3 选择器导致了这个问题(控制台中没有错误,除非我再次手动调用该函数)。我想为将来可能遇到此问题的 Google 搜索更新此内容。

有问题的选择器是$('*[name^="option["'). 显然,Safari 不能很好地使用这种选择器。在将一个类附加到我需要迭代的对象之后,问题似乎已经解决。

标签: javascriptphpjqueryasynchronouspost

解决方案


推荐阅读