Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX(Laravel)向php传递数据时出错_Javascript_Php_Laravel - Fatal编程技术网

Javascript 使用AJAX(Laravel)向php传递数据时出错

Javascript 使用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 =

下午好,我正在尝试使用Ajax将表单中的数据传递给控制器,但是我无法正确执行,我做错了什么

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/{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,