Javascript Safari和iOS设备上的jQuery AJAX出错

Javascript Safari和iOS设备上的jQuery AJAX出错,javascript,jquery,ios,ajax,safari,Javascript,Jquery,Ios,Ajax,Safari,我与Safari和所有iOS设备存在兼容性问题。我为一个项目创建了这个jQuery代码(见下面的链接),但我不明白为什么它不能与Safari一起使用。 有了Chrome、Firefox和Android,它运行得很好 (function ($) { $.ajaxSetup({ cache: false }); const ajax_dir = '/wp-content/plugins/oxygen-functions/assets/ajax/'; // SELECT LOCAT

我与Safari和所有iOS设备存在兼容性问题。我为一个项目创建了这个jQuery代码(见下面的链接),但我不明白为什么它不能与Safari一起使用。 有了Chrome、Firefox和Android,它运行得很好

(function ($) {
  $.ajaxSetup({ cache: false });

  const ajax_dir = '/wp-content/plugins/oxygen-functions/assets/ajax/';
  
  // SELECT LOCATION-SERVICE FORM

  $('.serv-select select').html(select_vars.services_select);
  $('.loc-select select').html(select_vars.locations_select);
  $('.service-location-form')
    .closest('form')
    .submit(async function (e) {
    e.preventDefault();
    
    $(this).find('.frm_message').addClass('d-none');

      var form = $(this).serializeArray(),
        service = form.find((x) => x['name'] == `item_meta[33]`).value,
        loc = form.find((x) => x['name'] == `item_meta[34]`).value,
        cat = loc + ',' + service,
        posts = await $.ajax({
          type: 'post',
          async: true,
          url: ajax_dir + 'posts-by-cat.php',
          dataType: 'json',
          data: {
            post_type: 'services',
            cat: cat,
          },
        }),
        url = await $.ajax({
          type: 'post',
          async: true,
          url: ajax_dir + 'post-link-id.php',
          dataType: 'json',
          data: {
            id: posts[0],
          },
        });
      //console.log(url);
      location.href = url;
    });
})(jQuery);
这是我从DevConsole获得的错误:

我怎么能修好它?有什么想法吗


谢谢

当前,您的代码没有任何错误捕获块

尝试将函数内容插入
Try/catch

(函数($){
$.ajaxSetup({cache:false});
const ajax_dir='/wp content/plugins/oxygen functions/assets/ajax/';
//选择位置-服务表单
$('.serv select').html(select\u vars.services\u select);
$('.loc select').html(选择变量位置);
$(“.服务位置表”)
.最近('形式')
.submit(异步函数(e){
e、 预防默认值();
试一试{
$(this.find('.frm_message').addClass('d-none');
var form=$(this).serializeArray(),
service=form.find((x)=>x['name']==`item\u meta[33]`)。值,
loc=form.find((x)=>x['name']==`item_meta[34]`)。值,
cat=loc+','+服务,
posts=wait$.ajax({
键入:“post”,
async:true,
url:ajax_dir+“posts by cat.php”,
数据类型:“json”,
数据:{
post_类型:“服务”,
猫:猫,
},
}),
url=wait$.ajax({
键入:“post”,
async:true,
url:ajax_dir+'post-link-id.php',
数据类型:“json”,
数据:{
id:posts[0],
},
});
//console.log(url);
location.href=url;
}捕捉(错误){
控制台日志(err);
//在这里处理错误-也许ajax失败了
}
});
})(jQuery);

这是整个片段:

(function ($) {
  $.ajaxSetup({ cache: false });

  const ajax_dir = '/wp-content/plugins/oxygen-functions/assets/ajax/'; 
  // SELECT LOCATION-SERVICE FORM

  $('.serv-select select').html(select_vars.services_select);
  $('.loc-select select').html(select_vars.locations_select);

  var closestForm = $('.service-location-form').closest('form');

  closestForm.submit(async function (e) {
    e.preventDefault();
    e.stopImmediatePropagation(); // <-- I fixed my issue with it

    $(this).find('.frm_message').addClass('d-none');

    var form = $(this).serializeArray();
    var service = form.find((x) => x['name'] == `item_meta[33]`).value;
    var loc = form.find((x) => x['name'] == `item_meta[34]`).value;
    var cat = loc + ',' + service;
    try {
      var posts = await $.ajax({
        type: 'post',
        async: true, // true was a string
        url: ajax_dir + 'posts-by-cat.php',
        dataType: 'json',
        data: {
          post_type: 'services',
          cat: cat,
        },
      });
    } catch (safariError) {
      console.error(safariError);
    }

    var url = await $.ajax({
      type: 'post',
      async: true, // also was 'true'
      url: ajax_dir + 'post-link-id.php',
      dataType: 'json',
      data: {
        id: posts[0],
      },
    });

    //console.log(url);
    location.href = url;
  });
})(jQuery);
(函数($){
$.ajaxSetup({cache:false});
const ajax_dir='/wp content/plugins/oxygen functions/assets/ajax/';
//选择位置-服务表单
$('.serv select').html(select\u vars.services\u select);
$('.loc select').html(选择变量位置);
var closestForm=$('.service location form')。最近的('form');
提交(异步函数(e){
e、 预防默认值();
e、 stopImmediatePropagation();//x['name']==`item_meta[33]`。值;
var loc=form.find((x)=>x['name']==`item\u meta[34]`);
var cat=loc+','+服务;
试一试{
var posts=await$.ajax({
键入:“post”,
async:true,//true是一个字符串
url:ajax_dir+“posts by cat.php”,
数据类型:“json”,
数据:{
post_类型:“服务”,
猫:猫,
},
});
}捕获(safariError){
控制台错误(safariError);
}
var url=await$.ajax({
键入:“post”,
async:true,//也是“true”
url:ajax_dir+'post-link-id.php',
数据类型:“json”,
数据:{
id:posts[0],
},
});
//console.log(url);
location.href=url;
});
})(jQuery);

您正在使用一个
async
函数进行提交。我正在使用该函数在两种类型的CPT之间生成链接。这是创建下拉菜单的唯一解决方案,您可以在下拉菜单中选择选项1,选项2-->提交-->转到右侧链接。如果您使用的是表单,并且有一个提交按钮(这样就不会发生真正的提交),您确实需要
event.preventDefault()
on
submit
),但是在使用AJAX时,不必强制执行实际的
submit
事件。您可以简单地使用
change
事件来触发AJAX。实际提交的表格是老式的。摆脱
async
wait
s,不管是哪种方式
xhr
将与那些等待的
s一起立即返回。。。你也不想让jQuery事件函数返回任何东西。如果你还需要其他问题,请告诉我。嘿@StefanWang谢谢你的跟进。我没有用你的代码片段解决这个问题。我的一个朋友建议我使用“e.stopImmediatePropagation();”好的。谢谢你的信息。不管怎样,很高兴听到你解决了这个问题。请你在这里贴一个答案,以便其他人将来可以参考?
(function ($) {
  $.ajaxSetup({ cache: false });

  const ajax_dir = '/wp-content/plugins/oxygen-functions/assets/ajax/'; 
  // SELECT LOCATION-SERVICE FORM

  $('.serv-select select').html(select_vars.services_select);
  $('.loc-select select').html(select_vars.locations_select);

  var closestForm = $('.service-location-form').closest('form');

  closestForm.submit(async function (e) {
    e.preventDefault();
    e.stopImmediatePropagation(); // <-- I fixed my issue with it

    $(this).find('.frm_message').addClass('d-none');

    var form = $(this).serializeArray();
    var service = form.find((x) => x['name'] == `item_meta[33]`).value;
    var loc = form.find((x) => x['name'] == `item_meta[34]`).value;
    var cat = loc + ',' + service;
    try {
      var posts = await $.ajax({
        type: 'post',
        async: true, // true was a string
        url: ajax_dir + 'posts-by-cat.php',
        dataType: 'json',
        data: {
          post_type: 'services',
          cat: cat,
        },
      });
    } catch (safariError) {
      console.error(safariError);
    }

    var url = await $.ajax({
      type: 'post',
      async: true, // also was 'true'
      url: ajax_dir + 'post-link-id.php',
      dataType: 'json',
      data: {
        id: posts[0],
      },
    });

    //console.log(url);
    location.href = url;
  });
})(jQuery);