【问题标题】:How to handle the data received to save it in the database Laravel and Ajax?如何处理接收到的数据以将其保存在数据库 Laravel 和 Ajax 中?
【发布时间】:2019-11-30 10:59:02
【问题描述】:

我正在尝试在不刷新页面的情况下将具有多个图像的产品添加到数据库中,我在控制台上没有收到任何错误,但我看到了像这样开头的长文本

<script> Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().indexOf('MAC') ? 'Cmd' : 'Ctrl', addEventListener = ....

错误来自console.log(data);这一行。产品与ProductsPhoto有关系,如何让它将产品添加到数据库中?

控制器

 public function store(Request $request)
 {
    $formInput=$request->except('filename');

    $product = product::create(array_merge($formInput, [
        'seller_id'=> Auth::user()->id,
        'user_id' => Auth::user()->id
    ]));
    foreach ($request->photos as $photo) {
       $filename = $photo->store('public/photos');
        ProductsPhoto::create([
            'product_id' => $product->id,
            'filename' => $filename
        ]);
    }
}

刀片

  <div class="panel-body">

   <input type="hidden" value="{{csrf_token()}}" id="token"/>

     <label for="pro_name">Name</label>
      <input type="text" class="form-control" name="pro_name" id="pro_name" placeholder="Enter product name">

        <label for="pro_price">Price</label>
           <input type="text" class="form-control" name="pro_price" id="pro_price" placeholder="Enter price">

        <label for="pro_info">Description</label>
         <input type="text" class="form-control" name="pro_info" id="pro_info" placeholder="Enter product description">

           <label for="stock">Stock</label>
            <input type="text" class="form-control" name="stock" id="stock" placeholder="Enter stock">

        <label  for="category_id">Choose Category</label>
           <select name="category_name" id="category_name">
             <option value=""> --Select Category -- </option>
               @foreach ($categoryname_array as $data)
                <option value="{{ $data->name }}"  >{{$data->name}}</option>
                 @endforeach
               </select>

 <label for="photos">Choose 5 Images</label>
  <input  "multiple="multiple" id="photos" name="photos[]" type="file">

  <input type="submit" class="btn btn-primary" value="Submit" id="btn"/>

</div>

阿贾克斯

   $(document).ready(function(){
   $("#btn").click(function(){
    var category_name = $("#category_name").val()
    var pro_name = $("#pro_name").val();
    var pro_price = $("#pro_price").val();
    var stock = $("#stock").val();
    var pro_info = $("#pro_info").val();
    var photos = $("#photos").val();
    var token = $("#token").val();

    $.ajax({

        type: "post",
        data: "pro_name=" + pro_name + "&pro_price=" + pro_price + "&stock=" + stock + "&_token=" + token + "&category_name=" + category_name + "&pro_info=" + pro_info + "&photos=" + photos,
        url: "<?php echo url('seller/product') ?>",
        success:function(data){
        console.log(data);
        }

    });
  });
});

路线

 Route::post('seller/product', 'ProductController@store')->name('product.store');

【问题讨论】:

  • 您是否检查了 chrome 开发者工具中的网络部分?如果没有点击,ctrl+shift+i,一旦开发工具出现,选择“网络”,然后再次触发事件(提交表单),然后点击将显示的链接并检查响应。
  • 当我点击回复@MEDZ 时,我看到了这个"message": "Invalid argument supplied for foreach()", "exception": "ErrorException",

标签: javascript php ajax laravel laravel-5


【解决方案1】:

根据你在cmets中添加的错误,$request-&gt;photos里面的值是不可迭代的,这是有道理的,因为你没有使用Form Data来处理上传。

普通的ajax不处理文件上传,所以你必须使用formData:

var token = $("#token").val();
$(document).ready(function(){
    $("#btn").click(function(){
        var form = $('form')[0]; // You need to use standard javascript object here
        var formData = new FormData(form);
        formData.append('_token', token); // adding token
        $.ajax({
            url: "<?php echo url('seller/product') ?>",
            data: formData, //just that without variables
            type: 'POST',
            contentType: false, // NEEDED, DON'T OMIT THIS (requires jQuery 1.6+)
            processData: false, // NEEDED, DON'T OMIT THIS
            success:function(data){
                console.log(data);
            }
        });
    });
});

【讨论】:

  • 所以我刚刚发现该产品已添加到数据库中,但没有添加到图像中,我尝试更改代码并使用带有formData 的代码,但它没有添加产品@MEDZ
  • 好吧,尝试 dd($request->all()) 然后检查“预览”选项卡上的网络部分,让我知道请求是否包含任何数据。
  • 我也没有在你的代码中看到
    标签 .. 确保你有一个标签,因为那是表单数据正在使用的。
  • 您是否在 html 模板中使用了
    标签?
  • 如果我把这个&lt;form method="POST" role="form" enctype="multipart/form-data"&gt; 我得到一个错误The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.@MEDZ
猜你喜欢
  • 2013-06-08
  • 2014-05-19
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多