在Laravel中进行异步AJAX调用

时间:2015-03-16 20:18:23

标签: php jquery ajax laravel

我正在尝试从Laravel中的View中进行异步jquery / ajax调用。有一个后台工作者任务由Redis Queue处理,然后在Redis上以key:value形式存储。

让我们说视图是:

项目> app>意见>主要> search.blade.php

访问此密钥:值对的脚本位于:

项目> app>意见>主要> getVal.blade.php

我通过 search.blade.php 异步调用 getVal.blade.php

<script>
    var userID = {{ isset($userID)?$userID:'0' }};
    $.ajax({
        type: "POST",
        url: 'main/getVal',
        data: { id: userId }
    }).done(function( msg ) {
        alert( msg );
    });
</script>

在routes.php中,我将 getVal 定义为:

Route::get('main/getVal',function() {
    return View::make('main.search');
});

我没有看到提示框。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我发现了以下内容:

  • 存在导致错误的拼写错误(userID vs userId)
  • url:&#39; main / getVal&#39;是一个相对地址,在Laravel我会使用它,所以它适用于任何页面: url:&#39; {{url(&#39; main / getVal&#39;)}}&#39;
  • 正如观察者所述,您需要处理POST请求

适合我的完整代码:

&#13;
&#13;
# routes.php

Route::get('main/getVal',function() {
    return view('main.search');
});

Route::post('main/getVal',function() {
    return 'This is a test';
});

# search.blade.php

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
    <script>
    var userID = {{ isset($userID)?$userID:'0' }};
    $.ajax({
        type: "POST",
        url: "{{ url('main/getVal')}}",
        data: { id: userID }
    }).done(function( msg ) {
        alert( msg );
    });
</script>
</head>
<body>
</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您的'main/getVal'路由在routes.php文件中定义,以响应GET请求,但您的jQuery正在执行AJAX POST请求。检查您的网络选项卡,我想您从Laravel收到404错误。您还可以添加链接到末尾的.fail()函数:

var userID = {{ isset($userID)?$userID:'0' }};
$.ajax({
    type: "POST",
    url: 'main/getVal',
    data: { id: userID }
}).done(function( msg ) {
    alert( msg );
}).fail(function() {
    alert('failed!');
});

解决方案?改为提出AJAX GET请求:

var userID = {{ isset($userID)?$userID:'0' }};
$.ajax({
    type: "GET",
    url: 'main/getVal',
    data: { id: userID }
}).done(function( msg ) {
    alert( msg );
}).fail(function() {
    alert('failed!');
});

或者,在Laravel中更改路线以响应POST请求:

Route::post('main/getVal',function() {
    return View::make('main.search');
});