在 Laravel 中通过 Ajax 存储数据失败

Posted

技术标签:

【中文标题】在 Laravel 中通过 Ajax 存储数据失败【英文标题】:Failed to store data though Ajax in Laravel 【发布时间】: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() 【参考方案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函数的代码,请看一下而不是重定向尝试发送数据回来(我做了)

以上是关于在 Laravel 中通过 Ajax 存储数据失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接

在 Laravel 5 中通过 AJAX 将数据从视图发布到控制器

在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器

在 laravel 中通过 ajax 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据

在 laravel 中通过 ajax 返回视图

在 Laravel 中通过 ajax 加载更雄辩的 hasMany 关系查询?