【问题标题】:Laravel: Send Data to Controller via AJAX Without FormLaravel:通过无表单的 AJAX 向控制器发送数据
【发布时间】:2017-08-30 01:44:51
【问题描述】:

我需要在单击按钮时通过 JS 将数据发送到 Laravel 控制器。我没有使用任何形式,因为数据是动态创建的。 每次我尝试发送数据时,都会收到内部服务器错误 (500),但无法在控制器或 laravel.log 文件中捕获该异常。

这就是我正在做的事情:

路线:

Route::post('section/saveContactItems', 'SectionController@saveContactItems');

控制器:

public function saveContactItems($id, $type, $items, $languageID = "PT"){ ... }

JS:

$('button').on("click", function (evt) {

    evt.preventDefault();

    var items = [];
    var id = $("#id").val();
    var languageID = $("#languageID").val();
    var data = { id: id, type: type, items: JSON.stringify(items), languageID: languageID };

    $.ajax({
        url: "/section/saveContactItems",
        type: "POST",
        data: data,
        cache: false,
        contentType: 'application/json; charset=utf-8',
        processData: false,
        success: function (response)
        {
            console.log(response);
        }
    });
});

我做错了什么?我怎样才能做到这一点?

更新:感谢@ShaktiPhartiyal 的answer(和@Sanchit 的帮助)我能够解决我的问题。如果其他人遇到类似问题,在遵循@Shakti 的回答后,我无法访问控制器中的数据。因此,我必须在将数据发送到服务器之前对其进行字符串化:

data: JSON.stringify(data),

【问题讨论】:

  • 当你使用 POST 时,你必须通过 csrf_token 字段...
  • @sanchitGupta 我试过了,但也没有成功......
  • 好的...让我们试试下面的@ShaktiPhartiyal 回答...如果它有效,请告诉我

标签: php jquery ajax laravel laravel-5


【解决方案1】:

你不需要使用

public function saveContactItems($id, $type, $items, $languageID = "PT"){ ... }

您必须执行以下操作:

public function saveContactItems()
{
    $id = Input::get('id');
    $type = Input::get('type');
    $items = Input::get('items');
    $languageID = Input::get('languageID');
}

是的,正如@Sanchit Gupta 建议的那样,您需要在请求中发送 CSRF 令牌:

AJAX 发送 CSRF 令牌的方法:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

如果你使用这种方法,你需要像这样设置一个元标记:

<meta name="csrf-token" content="{{csrf_token()}}">

data: {
        "_token": "{{ csrf_token() }}",
        "id": id
        }

更新

正如@Sanchit Gupta 指出的那样使用 Input 门面:

use Input;

【讨论】:

  • 我终于可以访问控制器操作 :) 现在我收到以下错误:异常 'Symfony\Component\Debug\Exception\FatalErrorException' 带有消息 'Class 'App\Http\Controllers\Input'成立'。这是由 $id = Input::get('id');
  • 在控制器顶部使用 Input 外观
  • 解决了错误,但是出来的数据是空的。这是我发送给控制器的内容:对象 {id:“5”,类型:“电子邮件”,项目:“[]”,语言 ID:“PT”}
  • 它的工作!只需要在将数据发送到控制器之前对其进行字符串化: JSON.stringify(data);
  • 很好解释@ShaktiPhartiyal +1。快乐编码:)
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多