Ajax 调用 Laravel 路由
Posted
技术标签:
【中文标题】Ajax 调用 Laravel 路由【英文标题】:Ajax call Laravel Route 【发布时间】:2016-05-26 13:08:01 【问题描述】:如何在我的 Ajax 中正确调用 Laravel 路由或控制器?
出现一个错误提示:
路线 [产品/创建] 未定义。 (看法: C:\xampp\htdocs\laravel\resources\views\jsBlade\logoInput.blade.php) (看法: C:\xampp\htdocs\laravel\resources\views\jsBlade\logoInput.blade.php)
我的路线如下所示:
# Middleware group if user is successfully logged in
Route::group(['middleware' => 'auth'], function ()
Route::get('/home', ['as' => 'home', 'uses' => 'PageController@showHome']);
# Product group
Route::group(['prefix' => 'product'], function ()
Route::get('/', ['as' => 'indexProduct', 'uses' => 'ProductController@indexProduct']);
Route::get('new', ['as' => 'newProduct', 'uses' => 'ProductController@newProduct']);
Route::get('show/productID', ['as' => 'showProduct', 'uses' => 'ProductController@showProduct']);
Route::get('edit/productID', ['as' => 'editProduct', 'uses' => 'ProductController@editProduct']);
Route::post('create', ['as' => 'createProduct', 'uses' => 'ProductController@createProduct']);
Route::post('update', ['as' => 'updateProduct', 'uses' => 'ProductController@updateProduct']);
Route::delete('destroy', ['as' => 'destroyProduct', 'uses' => 'ProductController@destroyProduct']);
);
);
我的阿贾克斯:
$("#input-logo").fileinput(
uploadUrl: 'route("product/create")',
type: 'POST',
allowedFileExtensions: ["jpg", "png", "gif", "jpeg"],
allowedFileTypes: ['image'],
headers:
'X-CSRF-Token': $('#_token').val(),
).on('filepreupload', function()
$('#kv-success-box').html('');
).on('fileuploaded', function(event, data)
$('#kv-success-box').append(data.response.link);
$('#kv-success-modal').modal('show');
);
</script>
控制器
<?php
namespace App\Http\Controllers;
use Input;
use App\Product;
use App\Companies;
use App\Http\Controllers\Controller;
class ProductController extends Controller
public function createProduct()
$data = Input::all();
$product = new Product;
$product->fill($data);
if($product->save())
return redirect()->route('root')->with('message','Success');;
Firefox 给出此错误消息:
语法错误:JSON.parse:第 1 行第 1 列的意外字符 JSON 数据。
【问题讨论】:
【参考方案1】:改变这部分
uploadUrl: 'route("product/create")',
到这里
uploadUrl: 'url("product/create")',
并在 ajax 中将 csrf 令牌添加到您的标头
headers:
'X-CSRF-Token': ' csrf_token() ',
,
【讨论】:
嗯,现在我收到另一条错误消息,内容如下:SyntaxError: Unexpected token <.> Firefox 给了我一个与谷歌不同的错误:SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data.【参考方案2】:只需 Ajax 到路由的 URL,如下所示:
这是我的路线:
Route::post('users/send-file-temp',['uses'=>'UsersController@postSendFileTemp']);
这是我的 ajax 调用:
$.ajax(
url: '/users/send-file-temp',
);
Ajax 会将请求发送到/users/send-file-temp
,Laravel 会识别路由并将其定向到相应的控制器。
【讨论】:
【参考方案3】:不要使用你的 ajax 方法类型和你的 Route 方法类型
以下示例
我的 Ajax 代码
$('#sendMsg').click(function(e)
e.preventDefault();
$.ajax(
url: 'url("R_E/users/sendMSG")',
data: $("#form-signin").serialize(),
type: "POST",
headers:
'X-CSRF-Token': ' csrf_token() ',
,
success: function(data)
alert("okay");
,
error: function()
alert("failure From php side!!! ");
);
);
我的路线代码
Route::post('/users/sendMSG', 'RE\MainController@sendMSG');
【讨论】:
【参考方案4】:而不是 route("product/create")
,
以下一个在 Laravel 8 中为我工作:
!route("product/create")!
【讨论】:
以上是关于Ajax 调用 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 路由上的 Ajax 调用,返回一个包含 ChartJS 标签日期的 json 编码数组