在 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">×</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 将用户输入数据从视图传递到控制器