web-dev-qa-db-fra.com

Laravel transmission de données en utilisant ajax au contrôleur

Comment passer l'ID de cet appel ajax à la fonction getAjax () de TestController? Quand je fais l'appel, l'url est testUrl? Id = 1

Route::get('testUrl', 'TestController@getAjax');

<script>
    $(function(){
       $('#button').click(function() {
            $.ajax({
                url: 'testUrl',
                type: 'GET',
                data: { id: 1 },
                success: function(response)
                {
                    $('#something').html(response);
                }
            });
       });
    });    
</script>

TestController.php

public function getAjax()
{
    $id = $_POST['id'];
    $test = new TestModel();
    $result = $test->getData($id);

    foreach($result as $row)
    {
        $html =
              '<tr>
                 <td>' . $row->name . '</td>' .
                 '<td>' . $row->address . '</td>' .
                 '<td>' . $row->age . '</td>' .
              '</tr>';
    }
    return $html;
}
9
learntosucceed

En fin de compte, je viens d'ajouter le paramètre à Route :: get () et à l'appel d'url ajax aussi. J'ai changé $ _POST ['id'] en $ _GET ['id'] dans la fonction getAjax () et ma réponse a été renvoyée

Route::get('testUrl/{id}', 'TestController@getAjax');

<script>
    $(function(){
       $('#button').click(function() {
            $.ajax({
                url: 'testUrl/{id}',
                type: 'GET',
                data: { id: 1 },
                success: function(response)
                {
                    $('#something').html(response);
                }
            });
       });
    });    
</script>

TestController.php

public function getAjax()
{
    $id = $_GET['id'];
    $test = new TestModel();
    $result = $test->getData($id);

    foreach($result as $row)
    {
        $html =
              '<tr>
                 <td>' . $row->name . '</td>' .
                 '<td>' . $row->address . '</td>' .
                 '<td>' . $row->age . '</td>' .
              '</tr>';
    }
    return $html;
}
14
learntosucceed

La méthode de votre ajax est GET mais dans le contrôleur, vous utilisez $ _POST pour obtenir de la valeur. C'est un problème.

Vous pouvez vous

$id = $_GET['id'];

Mais à Laravel, il a une jolie méthode pour le faire. C'est ici . Vous n'avez pas à vous soucier du verbe HTTP utilisé pour la requête, car l'entrée est accessible de la même manière pour tous les verbes.

$id = Input::get("id");

Si vous le souhaitez, vous pouvez filtrer le type de demande pour contrôler l'exception. Documents ici

Déterminer si la demande utilise AJAX

if (Request::ajax())
{
    //
}
6
Tam Nguyen