Laravel使用ajax向控制器传递数据

12

我该如何将此ajax调用中的id传递给TestController的getAjax()函数?当我进行调用时,url为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>

测试控制器.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;
}
3个回答

17
最终,我只是将参数添加到了Route::get()和ajax url调用中。在getAjax()函数中,我将$_POST['id']更改为$_GET['id'],这样就能得到我的响应了。
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;
}

代替 $id = $_GET['id']; 我使用了 Input::get("id"),无论如何都有效,非常感谢。 - Vipertecpro

7
您的 Ajax 方法是 GET,但在控制器中您使用 $_POST 来获取值。这是一个问题。
您可以使用
$id = $_GET['id'];

但是在Laravel中,它有一个非常好用的方法来完成这个任务。就在这里。您不需要担心请求使用的HTTP动词,因为输入可以在所有动词中以相同的方式访问。

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

如果您愿意,可以过滤请求类型以控制异常。 这里是文档

确定请求是否使用AJAX

if (Request::ajax())
{
    //
}

我不需要在$.ajax调用中指定URL的路由吗? - learntosucceed
在这种情况下,$.ajax或者$.post是一样的。 - Tam Nguyen

0
#in your controller function    
public function getAjax()
{
    #check if request is ajax
    if ($request->ajax()) {
        //your code
    }

    return $your_data;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接