Javascript Safari和iOS设备上的jQuery AJAX出错
我与Safari和所有iOS设备存在兼容性问题。我为一个项目创建了这个jQuery代码(见下面的链接),但我不明白为什么它不能与Safari一起使用。 有了Chrome、Firefox和Android,它运行得很好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
(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()
onsubmit
),但是在使用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);