javascript - 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 对此进行了测试,并且发生了同样的事情。
解决方案
推荐阅读
- bash - 创建一个没有尾随逗号的列表
- r - R 错误(fisher 测试):x 的所有条目必须是非负且有限的
- javascript - 我似乎无法正确回答的 JavaScript charAt 问题
- linux - 手动使资源“忙”
- java - 未来取消触发的 ListenableFuture 回调
- c++ - 参考更新时的 std::vector 损坏
- openssl - 有没有办法将 netty tcnative java 代码与其本机 c 库链接?
- sql - SQL Server + data.table + rxDataStep 中带有 R 脚本的分位数汇总
- python - python如何计算列表元素中的单词
- reactjs - 在子组件中使用 shouldComponentUpdate 似乎会破坏父组件中的状态?