I'm attempting to send a JSON document to a PHP script using AJAX. The JSON document is constructed from the value of a <textarea>
.
I have successfully executed the solution using JQuery, and (for fun?!) am working on achieving the same result with vanilla AJAX.
The calling PHP script:
<script>
function preview() {
var xhttp;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("output").innerHTML = this.responseText;
}
};
var postData = {
'html' : document.getElementById("editor").value,
};
xhttp.open("POST", "markuppreview.php");
xhttp.setRequestHeader('Content-type', 'application/json');
xhttp.send(postData);
};
</script>
<pre><textarea id="editor" name="content" placeholder="Enter your markup"></textarea></pre><br />
<button value="Preview" onclick="preview();">Preview</button>
<h2>Preview</h2>
<div id="output" style="height:100px"></div>
The receiving PHP:
$Parsedown = new Parsedown();
$Parsedown->setSafeMode(true);
$data['success'] = false;
$data['output'] = '';
if ($_POST['html']) {
$data['success'] = true;
$data['output'] = $Parsedown->text($_POST['html']);
}
echo json_encode($data);
I receive the following error, and can't work out why the postData.html isn't being received.
Warning: Undefined array key "html" in /Library/WebServer/Documents/markuppreview.php on line 8
{"success":false,"output":""}
I also tried a Javascript object method for constructing the JSON document, but received the same message. When I alert
the JSON document, it does show an html element with the data from the <textarea>
.
var postData = new Object();
postData.html = document.getElementById("editor").value;
postData = JSON.stringify(postData);
alert(postData);