Javascript 使用AJAX(Laravel)向php传递数据时出错
下午好,我正在尝试使用Ajax将表单中的数据传递给控制器,但是我无法正确执行,我做错了什么 JavascriptJavascript 使用AJAX(Laravel)向php传递数据时出错,javascript,php,laravel,Javascript,Php,Laravel,下午好,我正在尝试使用Ajax将表单中的数据传递给控制器,但是我无法正确执行,我做错了什么 Javascript $("#btn_enviar").click(function() { title = document.getElementById("title").value; url_clean = document.getElementById("url_clean").value; content =
$("#btn_enviar").click(function() {
title = document.getElementById("title").value;
url_clean = document.getElementById("url_clean").value;
content = document.getElementById("content").value;
CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url : 'dashboard/post/{data}',
type : 'post',
dataType: 'json',
data : {'CSRF_TOKEN':CSRF_TOKEN, 'title':title, 'url_clean':url_clean, 'content':content},
success : function (data) {
alert('send');
},
error : function() {
alert('error');
}
});
});
路线
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('dashboard.posts.posts');
});
Route::resource('dashboard/post','dashboard\PostController');
Route::post('dashboard/post/{data}', 'dashboard\PostController@store');
在POST route上,您不需要定义参数{data}
,因为它通过POST请求,所以将其更改为:
Route::post('dashboard/post/', 'dashboard\PostController@store');
还有你的Ajax:
$.ajax({
url : '/dashboard/post/',
type : 'post',
dataType: 'json',
traditional: true,
data : {'CSRF_TOKEN':CSRF_TOKEN, 'title':title, 'url_clean':url_clean, 'content':content},
success : function (data) {
alert('send');
},
error : function() {
alert('error');
}
});
您正在使用相对URL。尝试url:'/dashboard/post/{data}'
并用前导斜杠作为显示错误的图像,url路径dashboard/post/{data}
是必须传递给函数的参数值。
2) dashboard/post/{data}
重复为“dashboard/post/post/{data}
”,您需要将url:'dashboard/post/{data}
设置为url:'/dashboard/post/{data}
和{data}
应该是类似于对象id
或其他值。1-删除{data}来自ajax中的url(这里不需要)
比如:
2-据我所知,laravel csrf_令牌字段应该是数据字段中的_令牌,如:
data : {'_token':CSRF_TOKEN, 'title':title, 'url_clean'..
将您的完整url提供给ajax url参数。您正在使用资源路由,因此在get路由中,您的url将是base_url+/dashboard/post
在post ajax中,它调用当前页面url并附加给定的url路径。您能告诉提供商控制器中存储函数中的代码是什么吗
@sta的答案是正确的,但您的控制器代码可能没有返回正确的响应
也值得一提。你忘了加上拉维法。
因此,您应该将“_method”:“POST”添加到数据对象中
离题的是,为什么要通过getelementbyid从表单中获取所有值?
如果命名正确,您也可以这样做:
Let data = New FormData($('#form_id')) ;
像这样的。我没有测试过它是否诚实
编辑:
好的,我认为你应该这样做:
Routes.php>
Route::resource('dashboard/post','dashboard\PostController');
我不包括你的自定义url来存储的原因是,如果你显示你甚至不需要它。在那里的资源中,我已经有了一个可以通过ajax调用的存储。如果您需要更改存储url,请使用以下选项:
Route::resource('dashboard/post','dashboard\PostController',['except'=>['store']]);
Route::post('dashboard/post/{data}', 'dashboard\PostController@store');
url : `/dashboard/post/${data}`,
在这里,我将存储从资源路由中排除,这样就不会有两条路由指向完全相同的函数
PostController.php
public function store(StorePostPost $request){
logger($request->all();
return response()->json();
}
我记录您的请求,现在可以在文件/storage/logs/LOGNAME.log中找到
然后我返回一个状态为200的空json响应。这是默认值。因此,这应该出现在success函数中
现在,您的javascript:
$("#btn_enviar").click(function() {
title = document.getElementById("title").value;
url_clean = document.getElementById("url_clean").value;
content = document.getElementById("content").value;
CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url : '/dashboard/post',
type : 'post',
dataType: 'json',
data : {
'_token':CSRF_TOKEN,
'_method':'POST',
'title':title,
'url_clean':url_clean,
'content':content
},
success : function (data) {
alert('send');
},
error : function() {
alert('error');
}
});
});
现在,如果您真的想通过ajax将参数传递给url,您应该使用以下方法:
Route::resource('dashboard/post','dashboard\PostController',['except'=>['store']]);
Route::post('dashboard/post/{data}', 'dashboard\PostController@store');
url : `/dashboard/post/${data}`,
或
但是,在这种情况下,您给出的代码中没有定义数据,因此这很明显是不起作用的原因谢谢您的回答,虽然这不起作用,但其他答案也不起作用:C url:“/dashboard/post/{data}”,表明这不再通过控制台生成错误,但是,不会执行成功感谢您的费心,我编辑了我的代码,我个人总是在调试ajax时记录请求。因为你甚至无法在浏览器中看到dd。仅在“网络”选项卡中。但现在的问题仍然是URL不正确。首先,您试图创建的URL已经存在,因为它已关闭资源。因此,您应该排除该资源的URL。第二,我不明白为什么要重写store URL,因为您可能希望为store函数提供的额外参数可以很容易地添加到请求中,而不需要URL参数。您应该在storage/logs文件夹中查看日志文件,其中可能有一个日志,其中包含实际发生的错误。为了更方便地使用日志,我建议在你的环境中将日志频道改为每日,这样你就可以将日志放在一个分天的文件中。我不太清楚,除去url,我看到的是laravel课程,但它们不使用ajax,所以我开始寻找信息。你能把你认为正确的代码加起来吗?如果这对你有帮助,你能考虑把这个答案标记为正确吗?如果不让我知道
url : `/dashboard/post/${data}`,
url : '/dashboard/post/' + data,