Reputation: 167
In the console I am getting this response from my PHP script, sent through AJAX.
Uncaught Error: Syntax error, unrecognized expression: 100this <div class="comment-item">
<div class="comment-post">
<h3>Andrew D: <span>17th March 2014</span></h3>
<p>hi</p>
</div>
</div>
I am not sure why I am getting this though? It is stopping my success function from outputting the data properly. Below is my AJAX code:
$(document).ready(function(){
var form = $('form');
var submit = $('#submit');
form.on('submit', function(e) {
e.preventDefault();
$.ajax({
url: 'ajax_comment.php',
type: 'POST',
cache: false,
data: form.serialize(),
beforeSend: function(){
submit.val('Posting...').attr('disabled', 'disabled');
},
success: function(data){
var data_code = data.substring(0,3);
var return_message = data.substring(3); // this is return message without code
if(data_code == 100) {
var item = $(return_message).hide().fadeIn(800);
$('.new-comment').append(item);
form.trigger('reset');
submit.val('Submit Comment').removeAttr('disabled');
} else if(data_code == 200) {
//its a fail
alert("Error: " + return_message);
}
}
});
});
});
This gets sent to the PHP script shown below.
if(empty($order_id) === true || empty($comment) === true) {
echo "200comment or order id is empty";
exit();
} else if($num_rows_reviewed> 0) {
echo "200";
exit();
} elseif($no_id_match == 0) {
echo "200";
exit();
} elseif(strlen($comment) > 499) {
echo "200 comment cannot be bigger then 499";
exit();
} else {
echo"100"; // all is good
?> <div class="comment-item">
<div class="comment-post">
<h3><?php echo $name; ?>: <span><?php echo $date; ?></span></h3>
<p><?php echo $comment; ?></p>
</div>
</div>
<?php }
I really do not know what I am doing wrong here. Please can someone help?
Many thanks in advance!
Upvotes: 3
Views: 541
Reputation: 38345
It's the space between 100
and your HTML causing the jQuery code to fail. While the jQuery method is heavily overloaded to do a number of things, the version that parses a string of HTML to create new DOM elements doesn't like leading whitespace. Either remove it from your PHP file or call .trim()
on return_message
:
var item = $(return_message.trim()).hide().fadeIn(800);
As an aside, you'd be better off using JSON to return an object that has both data_code
and return_message
properties, rather than relying on splitting strings. You'd create an associative array in your PHP then use the json_encode
function to echo out the JSON representation (and I just about used up all of my PHP knowledge).
Upvotes: 3