jQuery/Ajax 页面重定向在 iPhone 和 Safari 中不起作用

ugs*_*knt 5 javascript ajax jquery window.location http-redirect

我正在尝试使用将一个页面重定向到另一页面jQuery/ajax。这里我使用php作为服务器端。

这是我向js发送数据的方式:

$url = 'index.php?p=dashboard'; 
// print the message to Ajax:
$messages = array('success'=>true,'pageRedirect'=>$url);      
echo json_encode($messages);
Run Code Online (Sandbox Code Playgroud)

这就是我处理响应的方式AJAX

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,
    success: function(json) {
      json = jQuery.parseJSON(json)        
      if (json.success) {
        setTimeout(function() {
          $(window).attr('location',json.pageRedirect);
        }, 500);
      } 
    }
  });
  
  request.always(function () {
    $inputs.prop("disabled", false);
  });
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,以上一切在firefox和中都可以正常工作,但是此重定向在和浏览器chrome中不起作用。希望有人可以帮助我。iphonesafari

Laj*_*pad 1

在 iPhone 模拟器中测试了以下内容:

window.location.href = "google.com"
Run Code Online (Sandbox Code Playgroud)

它抱怨 URL 格式错误:

在此输入图像描述

跑步

window.location.href = "http://google.com"
Run Code Online (Sandbox Code Playgroud)

作品。

基本上,您需要查看收到的错误,无论是 iPhone 还是 Safari。如果您对此功能仍然存在问题,那么您可能需要编辑您的问题并添加有价值的信息,例如您收到的错误消息。

编辑

我私下与 @ugsgknt 讨论了这个问题,甚至在修复之后,我们也设法使用 iPhone Safari 重现了该问题,并使用服务器端日志记录(通过发布服务器上可能发生的任何错误)来找出问题所在。

事实证明,该表单是由 iPhone Safari 的浏览器发布的,尽管提问者编写的代码非常明确地调用了preventDefault.

我已经为此提出了一个解决方法,据我所知,在撰写本文时它正在实施:

短期解决方案

  • 服务器需要处理 Javascript 由于某种原因未运行的情况
  • 因此,表单指向的页面应该检查请求方法
  • 如果是 POST,则相应地处理登录
  • 并通过 PHP 将页面重定向到所需的目标

长期解决方案

必须查明 iPhone 是否加载了 Javascript,并找出阻止其执行的原因。如果问题在 Macbook 上重现,那么提问者暂时需要一台 Macbook 才能轻松重现并解决问题。如果没有,则需要一个提供控制台输出的合适的 iPhone 模拟器。

像重构 HTML 以不使用form标签并使用其他内容这样简单的方法可能会有所帮助。这至少会阻止浏览器发布。但真正的问题是:为什么 Javascript 没有在移动 Safari 上执行。也许 Javascript 正在那里运行,并且在定义表单发布事件侦听器之前由于某种原因失败。或者,可能甚至没有为此类设备加载该文件。可能有很多可能的原因,提问者需要适当的开发环境才能检测到确切的问题。