jQuery/Ajax页面重定向在iPhone与Safari中无法生效求助
解决Safari中AJAX成功后无法重定向的问题
问题原因
你当前使用$(window).attr('location', json.pageRedirect)实现页面跳转,这种jQuery操作window.location的方式在Safari(包括iOS端Safari)存在兼容性问题,导致跳转失效。
修复方案
1. 改用原生JS跳转方式
替换为所有浏览器都兼容的原生JavaScript跳转写法,推荐两种方式:
setTimeout(function() { // 方式1:普通跳转,允许用户回退到登录页 window.location.href = json.pageRedirect; // 方式2:替换当前历史记录,无法回退(更适合登录成功后的场景) // window.location.replace(json.pageRedirect); }, 500);
2. 优化AJAX的JSON解析(可选)
你当前手动调用jQuery.parseJSON(json)解析响应,可通过在AJAX配置中指定dataType: 'json',让jQuery自动完成JSON解析,避免手动解析可能引发的潜在问题:
request = $.ajax({ url: "user_processing.php", type: "post", data: serializedData, dataType: 'json', // 新增该行,自动解析JSON success: function(json) { // 无需再手动执行parseJSON if (json.success) { setTimeout(function() { window.location.href = json.pageRedirect; }, 500); } } });
完整修改后的JS代码
var request; $("#login").on('submit', function(e) { e.preventDefault(); if (request) { request.abort(); } var $form = $(this); var $inputs = $form.find("input, select, button, textarea"); var serializedData = $form.serialize(); $inputs.prop("disabled", true); request = $.ajax({ url: "user_processing.php", type: "post", data: serializedData, dataType: 'json', success: function(json) { if (json.success) { setTimeout(function() { window.location.href = json.pageRedirect; }, 500); } } }); request.always(function () { $inputs.prop("disabled", false); }); });
内容的提问来源于stack exchange,提问作者ugsgknt
相关产品推荐
相关产品推荐

