无法从外部PHP文件中的AJAX调用中读取POST数组

时间:2014-03-15 23:38:02

标签: javascript php html ajax post

我已尝试过每个可以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;正在写。

我尝试过的事情:

  1. 我读到事件监听器函数应该在它们生成之前附加到HTML元素,这似乎是违反直觉的。没有改变。

  2. 使用

    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    
  3. 没有工作。而且,根据我为此所做的研究,不应该只对GET电话有必要吗? (我需要使用POST)

    1. 使POST调用同步。没有改变。
    2. 我知道你传递的元素的名称需要是你在PHP脚本中所依赖的,但是它不起作用。我不想设置表单操作=&#34;&#34;因为我不想重定向,这就是我通过AJAX的原因。 最后,我注意到了一些事情,当我点击提交时它会改变URL,这是我对GET的期望。这是具体的GET,对吗?我清楚地将它标记为POST。

      有谁看到我做错了什么?

      P.S。 - 请问,如果它在JS方面,没有jQuery。到目前为止,我已经避免了这种情况,我试图保持这种状态。

1 个答案:

答案 0 :(得分:0)

您需要一个变量来传递请求而不仅仅是传递值

xhr.send("comments="+data);

因此,在服务器端,您可以通过参数名称检索数据。