我已尝试过每个可以google的解决方案,但我无法在外部PHP文件中读取POST数组中的数据。这是文本字段的HTML。
<form>
<textarea id="comment_text_area" name="comments" rows="5" cols="40">
</textarea>
<label for="comment_text_area">Comment:</label>
<br>
<input type="submit" name="submit" value="Submit" onclick="SaveComments()">
</form>
...和JS函数进行AJAX调用
function save()
{
var data = document.getElementById("comment_text_area");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open('POST', 'save_comments.php', true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
alert("Comments saved!");
}
}
xhr.send(data);
}
...和PHP文件
<?php
if(isset($_POST['comments']))
{
$data = htmlentities($_POST['comments']);
$file = "comments.txt";
file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
}
else
{
$data = "empty";
$file = "comments.txt";
file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
}
?>
我所知道的是: AJAX调用已成功完成,脚本正在运行并且“#34;空”&#34;正在写。
我尝试过的事情:
我读到事件监听器函数应该在它们生成之前附加到HTML元素,这似乎是违反直觉的。没有改变。
使用
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
没有工作。而且,根据我为此所做的研究,不应该只对GET电话有必要吗? (我需要使用POST)
我知道你传递的元素的名称需要是你在PHP脚本中所依赖的,但是它不起作用。我不想设置表单操作=&#34;&#34;因为我不想重定向,这就是我通过AJAX的原因。 最后,我注意到了一些事情,当我点击提交时它会改变URL,这是我对GET的期望。这是具体的GET,对吗?我清楚地将它标记为POST。
有谁看到我做错了什么?
P.S。 - 请问,如果它在JS方面,没有jQuery。到目前为止,我已经避免了这种情况,我试图保持这种状态。
答案 0 :(得分:0)
您需要一个变量来传递请求而不仅仅是传递值
xhr.send("comments="+data);
因此,在服务器端,您可以通过参数名称检索数据。