Невозможно получить результаты из базы данных при успешном вызове ajax - PullRequest
0 голосов
/ 24 марта 2020

Я новичок, я не могу получить результат из базы данных через ajax вызов в моем PHP коде.

Вот пример кода php с ajax вызов.

  <script>
           $('.input').on('click',function(e){
                e.preventDefault();
                $.ajax({
                    method:'POST',
                    url:'',
                    data:{data_username:$('#username').val(),
                    data_lastname:$('#lastname').val()},
                    success:function(data){
                        var x =JSON.parse(data);
                        for(var index in x){         //here my error
                            console.log(x[index].username);
                        }
                        }

                    ,error:function(){
                        alert("failed!!!!!");
                    }

                });
            });
</script>

1 Ответ

0 голосов
/ 24 марта 2020

Просмотр кода, который вы разместили, показывает, что вы отправляете запрос 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...