在Laravel-5中发布ajax请求

时间:2015-09-15 09:37:15

标签: php ajax laravel-5

我正在尝试在我的页面中发送ajax post请求,但我在控制台中收到错误。

POST http://local.bazaar.com/testimonials/submit 500 (Internal Server Error)

routes.php文件

Route::post('/testimonials/submit','TestimonialsController@savetesti');

Ajax.js

$("#submitTestimonial").click(function() {
    $.ajax({
        url: '/testimonials/submit',
        method: 'POST',               
        success: function(data) {
            alert(data);
            die;
        }
    })

    return false;
});

TestimonialsController.php

<?php
namespace App\Http\Controllers;

use Input;
use Request;

class TestimonialsController extends Controller
{
    /**
     * Perform validations on user data
     * Hash Password
     * Create
     * @return Response
     */
    public function savetesti()
    {
        // Getting all post data
        print_r("success");
    }
}    
?>

viewPage-&GT;

<div class="testimonialForm">
    <form action="#" method="POST">
        <div class="testimonialFormTitle">Write A Testimonials</div>
        <a class="closeTestimonialBtn"></a>
        <p><input type="text" placeholder="Your Name" id="tname" name="name" class="inputTxt placeholder"></p>
        <p><input type="text" placeholder="Your Email" id="temail" name="email" class="inputTxt placeholder"></p>
        <p><textarea placeholder="Testimonial" cols="50" rows="6" id="tmessage" name="message" class="inputTxtArea placeholder"></textarea></p>
        <a class="greyBtn" id="submitTestimonial" href="#">Submit</a>
    </form>
</div>

1 个答案:

答案 0 :(得分:1)

我认为问题是csrf令牌 当你发布帖子请求时,应该总是有一个csrf标记。

如果你创建了一个带有illuminate / html外观的表单,那么非常简单

{!! Form::open() !!}
{!! Form::close() !!}

如果你没有照亮/ html,请转到你的composer.json文件并添加

"illuminate/html": "~5.0", 

在laravel之后的require块中。之后运行composer update并转到/config/app.php,你应该添加一个新的提供者和别名

'providers' => [
    'Illuminate\Html\HtmlServiceProvider',
],

'aliases' => [
    'Form' => 'Illuminate\Html\FormFacade',
],

现在在这个表单中有一个带有crsf标记的隐藏输入字段 在您的javascript文件中,您可以使用类似的方式获取此代码。

var data = {};
data._token = $('[name="_token"]').val();

然后使用ajax post call

发送数据对象
$.ajax({
    url: '/testimonials/submit',
    method: 'POST',   
    data: data,            
    success: function(data){
        alert(data);
    }
});

为了测试目的,你可以改变你的功能

public function savetesti()
{ 
    return 'success';
}