首页 > 解决方案 > Safari 不发送 AJAX 表单数据

问题描述

一个奇怪的问题出现在代码未更改的页面上。我已经剥离了一些东西,现在已经隔离了这个问题,但我无法理解它。

在这个表单上,如果我只输入文本字段,Safari 将不会发送表单(尽管没有发生错误)。当仅输入文本字段时,它会在 Firefox 中发送。

如果图像字段有文件或者我完全删除了图像文件,Safari 将发送表单。因此,由于某种原因,图像字段中缺少数据导致表单无法在 Safari 中发送。

文本字段是由 Javascript 创建的似乎很重要,如果我只是使用常规文本输入创建页面以开始问题就不会发生。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<script type="text/javascript" language="javascript">


function sendForm(){


    var formElement = document.querySelector("#upload");
    var formData = new FormData(formElement);

    var request = new XMLHttpRequest();
    request.open("POST", "test.php");


    request.send(formData);

}


</script>

</head>

<body>

<form name="upload" id="upload" >



<h2>Image</h2>
<input name="image" type="file"  />

<p onclick="sendForm()" />SEND</p>


</form>

<script>

for (var f = 0; f < document.forms.length; f++) {

new_input = document.createElement('input');
new_input.type = 'hidden';
new_input.name = 'title';
new_input.value = 'test';

document.forms[f].appendChild(new_input);

}   

</script>


</body>

</html>

我正在跟踪发送的数据:

<?php

$title = $_REQUEST['title'];

$file = 'output.txt';

$current = file_get_contents($file);


file_put_contents($file, $title."\n");


?>  

此外,如果request.send(formData);更改为,request.send("test");则在所有情况下都将发送“测试”,因此 Safari 似乎存在 FormData 对象的问题。

我已经使用 fetch() API 对此进行了测试,并且发生了同样的事情。

标签: javascripthtmlajaxsafari

解决方案


推荐阅读