$ _POST не возвращает значение

Я искал ответ на этот вопрос уже несколько дней, но если я пропустил ответ в другом сообщении, сообщите мне.

Я пытаюсь попасть в Ajax, поэтому у меня очень простая форма в моем index.php, с отдельными файлами php и javascript:

index.php

<div id="ajax-test">
    <form action="ajax/ajax.php" method="POST">
        <textarea name="someText" id="some-text" placeholder="Type something here"></textarea>
            <button type="button" onclick="loadDoc()">Submit</button>
    </form>
    <div id="ajax-text"></div>
</div>

main.js:

function getXMLHttpRequestObject() {
    var temp = null;

    if(window.XMLHttpRequest)
        temp = new XMLHttpRequest();
    else if(window.ActiveXObject) // used for older versions of IE
        temp = new ActiveXObject('MSXML2.XMLHTTP.3.0');

    return temp;
}// end getXMLHttpRequestObject()


function loadDoc() {
    var ajax = getXMLHttpRequestObject();

    ajax.onreadystatechange = function() {
        if(ajax.readyState == 4 && ajax.status == 200) {
            document.getElementById('ajax-text').innerHTML = ajax.responseText;
            console.log(ajax.responseText);
        }
    };

    ajax.open("POST", "ajax/ajax.php", true);
    ajax.send();
}

ajax.php:

<?php

print_r('\'' . $_POST['someText'] . '\' is what you wrote');

?>

Всякий раз, когда я пытаюсь распечатать, он печатает: "Это то, что вы написали" - что мне не хватает/не делает/делает неправильно, что не позволяет мне получить доступ к содержимому someText? Я изменил свое соглашение об именах, поменял местами одну цитату на двойную кавычку, попробовал GET вместо POST, но ничего не получилось.

Ответ 1

Это, вероятно, связано с ошибкой

Undefined index: someText in C:\xampp\htdocs\ssms\sandbox\ajax\ajax.php on line 3

У вас было несколько проблем с вашим кодом, который у меня нет времени, чтобы перечислить сейчас. Это должно работать нормально, плюс я использовал функцию onkeyup() для отображения текста в реальном времени, даже не нажимая кнопку отправки.

Индексный файл

<div id="ajax-test">
<form method="POST" onsubmit="return false;">
    <textarea onkeyup="loadDoc()" name="someText" id="someText" placeholder="Type something here"></textarea>
        <button type="button" onclick="loadDoc()">Submit</button>
</form>
<div id="ajax-text"></div>
</div>
<script type="text/javascript" src="main.js"></script>

Основной файл Javascript

function _(x) {
   return document.getElementById(x);
 }
function ajaxObj ( meth, url ) {
   var x = new XMLHttpRequest();
   x.open( meth, url, true );
   x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   return x;
}
function ajaxReturn(x){
   if(x.readyState == 4 && x.status == 200) {
      return true;
   }
}
function loadDoc() {
    var someText = _("someText").value;
    var ajax = ajaxObj("POST", "ajax/ajax.php");

    ajax.onreadystatechange = function() {
       if(ajaxReturn(ajax) == true) {
          _('ajax-text').innerHTML = ajax.responseText;
          console.log(ajax.responseText);
       }
    }
  ajax.send("someText="+someText);
 }

Файл AJAX PHP

if(isset($_POST['someText'])){
  $someText = $_POST['someText'];
  echo "\"$someText\"" . ' is what you wrote';
  exit();
} else {
  echo "An error occured";
  exit();
}

Ответ 2

Вы можете попытаться установить запрос заголовка, а также поместить данные внутри отправки. Вот пример как -

ajax.open("POST", "ajax/ajax.php", true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.send("someText="+document.getElementById('some-text').value);