【问题标题】:Failed to store data though Ajax in Laravel在 Laravel 中通过 Ajax 存储数据失败
【发布时间】:2015-02-03 05:26:35
【问题描述】:

我正在尝试使用 Laravel 中的 Ajax 从引导模式存储数据。这是我的代码:

route.php

Route::get('/repository/', 'RepositoryController@index');
Route::post('/repository/', 'RepositoryController@store');

现在 repository.index

@section('popups')
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">

          <div class="row row-bg">
              <div class="col-md-12">
                  <input type="text" class="text-field" style="width:100%; margin-bottom: 10px;" id="name" name="name" placeholder="URL name*: ">
                  {{$errors->first('name','<span class="error_message postShake"><i class="fa mr fa-exclamation-triangle"></i> Please enter the name</span>')}}
              </div>
              <div class="col-md-12">
                  <input type="text" class="text-field" style="width:100%;  margin-bottom: 10px;" id="url" name="url" placeholder="Enter the URL*: ">
              </div>
              <div class="col-md-12">
                  <textarea class="text-field" style="width:100%;  margin-bottom: 10px;" id="description" name="description" placeholder="Enter the URL*: "></textarea>
              </div>
          </div>

      </div>
      <div class="modal-footer">
        <button type="submit" class="whiteButton" data-dismiss="modal">Close</button>
        <button type="button" id="add" name="add" class="blueButton">Save changes</button>
      </div>
    </div>
  </div>
</div>


<script>
    $(document).ready(function(){
        $('#add').click(function(e){
           e.preventDefault(); 
           var name=$(this).find('input[name=name]').val();

           //post Ajax
           $.post('/repository', 
            {
                "name": $(this).find('input[name=name]').val(),
                "url": $(this).find('input[name=url]').val(), 
                "description": $(this).find('input[name=description]').val()
            }, function(data){
               // console.log(data);
           }, 'json');
        });
    });
</script>
@stop

而在RepositoryController.php

<?php

class RepositoryController extends BaseController{

    public function index(){
        return View::make('repository.index');
    }


    public function store(){

        $validation=Validator::make(Input::all(), Link::$rules);

        if($validation->fails()){
            return Redirect::back()->withInput()->withErrors($validation->messages());
        } 
        $link = new Link;

        $link->name=Input::get('name');
        $link->url=Input::get('url');
        $link->description=Input::get('description');

        $link->save();
        return Redirect::route('repository.index');
    }


}

Link.php型号

<?php

class Link extends Eloquent{

    public static $rule= ['name'=>'reuiqred',
                          'url'=>'required',
                          'description'=>'required'];

}

在控制台中,它给了我一个错误:Failed to load resource: the server responded with a status of 500 (Internal Server Error)

可能是什么问题?此外,验证错误消息也不会出现在模式上。

【问题讨论】:

  • ajax 和重定向在一起没有任何意义。
  • 我怎样才能使这段代码工作?我在 Laravel 中学习 Ajax
  • 而不是重定向,你应该使用Response::json()

标签: jquery ajax laravel laravel-4 modal-dialog


【解决方案1】:

修复你的路线

类似的东西:

Route::get('/repository/index', 'RepositoryController@index');
Route::post('/repository/store', 'RepositoryController@store');

同时修复你的 js。

 $.post('/repository', 
        {
            "name": $('#name').val(),
            "url": $('#url').val(), 
            "description": $('#descsription').val()
        }, function(data){
           // console.log(data);
       }, 'json');

你的 id 而不是名字 attrs

并修复你的控制器

return Renurn::json($link);

【讨论】:

    【解决方案2】:

    使用以下内容更改您的 json

    $('#add').click(function() {
    name = document.getElementById('name').value;
    url = document.getElementById('url').value;
    description = document.getElementById('description').value;
    $.post('/repository', {'name': name, 'url': url, 'description': description}, function(data) {
    
       var parsed = JSON.parse(data);
    
        var html = 'content echoed in your post function goes here';
    
        $('#requestStatus').append(html);
    }).success(function() {
        $('#comment').val('');
        $('#sentSuccess').html('Something happened!').show().delay(5000).fadeOut();
    }).fail(function() {
        $('#sentFailed').html('Nothing happened').show().delay(5000).fadeOut();
    });
    });
    

    还有你的帖子功能

    public function store(){
    
    $name = Input::get('name');
    $url = Input::get('url');
    $description = Input('description');
    
    $data = array('name' => $name , 'url' => $url);
        $validation=Validator::make($data, Link::rules());
    
        if($validation->fails()){
            return Redirect::back()->withInput()->withErrors($validation);
        } 
        $link = new Link;
    
        $link->name= $name;
        $link->url= $url;
        $link->description= $description;
        $link->save();
    //now to return a message 
        echo json_encode(array('name' => $name, 'url' => $url, 'description' => $description);
    }
    

    你的链接应该是

    <?php
    class Link extends Eloquent{
    public $table = 'table_name';
    
    public static function rule()
    {
    $rule= ['name'=>'reuiqred',
                          'url'=>'required',
                          'description'=>'required'];
    return $rule;
    }
    }
    

    【讨论】:

    • 我还是有同样的问题:Failed to load resource: the server responded with a status of 500 (Internal Server Error)
    • 修复了post函数的代码,请看一下而不是重定向尝试发送数据回来(我做了)
    猜你喜欢
    • 2010-12-03
    • 2017-09-05
    • 2012-11-09
    • 1970-01-01
    • 2019-03-06
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多