Safari不发送AJAX表单数据

时间:2018-06-08 09:17:47

标签: javascript html ajax safari

在未更改代码的页面上开始出现一个奇怪的问题。我已经把事情搞砸了,现在已经把问题弄清了,但我无法理解它。

如果我只输入文本字段,则在此表单上,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");,则会在所有情况下发送“test”,因此Safari似乎遇到了FormData对象的问题。

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

0 个答案:

没有答案