Просмотр кода, который вы разместили, показывает, что вы отправляете запрос ajax на ту же страницу, что заставляет меня думать, что ошибка, которую вы получаете, заключается в том, что другой HTML контент все смешан с JSON контент, который вы хотите. Чтобы этого не произошло, отправьте запрос на другую страницу или используйте ob_clean
перед тем, как начать отправлять ответ на запрос ajax и убедиться, что сценарий завершается в момент отправки данных. Возможно, поможет следующее:
Существует также орфографическая ошибка $usernmae
должно быть $username
!
<?php
$use_live_db=false; # set to true to try running sql queries against db
if( isset( $_POST['data_username'], $_POST['data_lastname'] ) ){
/*
when sending ajax to the same page you must ensure that ONLY the
data you want is allowd to be sent - so using `ob_clean()` will
discard any previously generated content from appearing in the
output
*/
ob_clean();
/*
I appreciate this is probably for testing but this is
simply yielding data you already know...
*/
$username=$_POST['data_username'];
$lastname=$_POST['data_lastname'];
$sql='SELECT username, lastname FROM login where username=:one AND lastname=:two';
$results=array(
'username' => $username,
'lastname' => $lastname,
'sql' => $sql
);
if( $use_live_db ){
/* !!! CHANGE THIS TO THE APPROPRIATE FILE FOR YOUR SYSTEM !!! */
require '/path/to/db-pdo.php';
$results=array();
$stmt=$db->prepare( $sql );
if( $stmt ){
# think it should be bindParam rather than bindparam!
$stmt->bindParam(':one',$username,PDO::PARAM_STR);
$stmt->bindParam(':two',$lastname,PDO::PARAM_STR);
$stmt->execute();
while( $row=$stmt->fetch() ){
$results[]=$row;
}
}else{
exit('error: failed to prepare sql query');
}
}
/*
Similarly to using `ob_clean()` you must prevent the remainder of
the current page appearing as part of the ajax response -
so use `exit` or `die`
*/
header('Content-Type: application/json');
exit( json_encode( $results ) );
}
?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>jQuery & AJAX - POST request to PHP script to interrogate db</title>
<script src='//code.jquery.com/jquery-latest.js'></script>
</head>
<body>
<form>
<input type='text' id='username' name='username' value='mike' />
<input type='text' id='lastname' name='lastname' value='hunt' />
<input type='button' class='input' value='OK' />
</form>
<script>
$('.input').on('click',function(e){
e.preventDefault();
$.ajax({
method:'POST',
url:location.href,
/*
If you set the dataType
properties jQuery automagically ensures
the response is in the correct format- JSON
*/
dataType: 'json',
data:{
data_username:$('#username').val(),
data_lastname:$('#lastname').val()
},
success:function( json ){
console.info('username: %s\nlastname: %s\nSQL: %s', json.username, json.lastname, json.sql )
alert('ok')
},
error:function(){
alert('failed!!!!!');
}
});
});
</script>
</body>
</html>