如何从与我的html相关的javascript中发送数据,并将数据路由到laravel 5控制器



好的,所以我已经知道如何连接与HTML相关的Javascript并从PHP发送/或获取数据(在这种情况下,不使用任何框架,只使用"普通PHP")

最近,我一直在使用Laravel5作为我的PHP框架,因为它看起来是一个很棒的框架,我做了一些简单的路由来创建、更新、插入和删除,修改数据库的操作就像我预期的那样。

我的路由、控制器和create.blade.php的Laravel 5代码看起来像下面的代码

routes.php

Route::get('/', [
'as' => '/', 
'uses' => 'PagesController@getIndex'
]);
Route::resource('product', 'ProductController');

ProductController.php

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpRequests;
use DB;
use AppProduct;
use resourcesviewsproducts;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$product = DB::select('select * from feedback');
echo "<script>console.log('tes')</script>";
return view('products.index')
->with('product',$product);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
echo "<script>console.log('tes')</script>";
return view('products.create');
}
/**
* Store a newly created resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
echo "<script>console.log('tes')</script>";
/*$rating = new Product;
$rating->Name= $request->name;
$rating->avg=$request->price;
$rating->save();*/
$inputs= $request->all();
$product= Product::create($inputs);
//return redirect()->route('product.index');
return redirect()->action('ProductController@index');
}
/**
* Display the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
echo "<script>console.log('tes')</script>";
//'$product= Product::where('idoveralRating',$id)->first();
$product = Product::find($id);
echo "<script>console.log('yes')</script>";
//return $product;
return view('products.show')
->with('product',$product);
}
/**
* Show the form for editing the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
//
// $product= Product::all();
$product= Product::where('idoveralRating', $id)->first();
return view('products.edit')
->with('product',$product);
}
/**
* Update the specified resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
//
$product = Product::find($id);
$product->Name = $request->Name;
$product->Avg = $request->Avg;
$product->save();
$product = Product::find($id);
return redirect()->route('product.index');
}
/**
* Remove the specified resource from storage.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
$product= Product::find($id) ->delete();
return redirect()->route('product.index');
}
}

createblade.php

@extends('layouts.layout')
@section('Head')
<title>Create new product</title>
@stop
@section('Body')
@include('pages.addVisit')
{!!Form::open(['route'=>'product.store'])!!}
{!!Form::label('name','name')!!}
{!!Form::text('Name',null,['placeholder'=>'give a name'])!!}
{!!Form::label('price','Price')!!}
{!!Form::text('price','$0',['placeholder'=>'give a price'])!!}
{!!Form::submit('create')!!}
{!!Form::close()!!}
@stop

现在,我正试图通过将我的数据从javascript发送到ProductController.php来创建新的数据,并运行该方法来创建然后保存数据,这是公共函数存储(Request$Request),我需要将数据发送到product/create

下面是我在myJs中的ajax功能,看起来像

myJs.js

function addNameThroughtLaravelController(){
var req = new XMLHttpRequest();
req.open("POST", "laravel/public/product/create", false);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.send("Name=Jeremy");
}

我现在面临的问题是,我正试图将我的数据发送到ProductController的存储方法,但在这种情况下,似乎不允许使用post方法(控制台返回了方法不允许的错误,这与我从javascript中发布的方法有关)

我还不知道,但有可能将与html相关的javascript数据发送到laravel.blade.php和/或控制器吗?(我认为应该是)

我所期望的一些重要总结

输入:点击html和javascript发送数据到ProductController@Store

输出:我根据从我的laravel控制器的javascript发送的名称更新数据库

我不熟悉Route::resource()方法,因为我通常只有用于基本CRUD操作的Route::get()Route::post()

Method not allowed意味着当前请求方法(在您的情况下为POST)对您尝试POST的路由无效。因此,如果您修改Routes.php文件以包含类似以下内容:

Route::post("laravel/public/product/create", "ProductController@store");

您应该能够在ProductController.php中查看发送到public function store()的数据。

点击此处查看路由的完整文档

希望这能有所帮助!

最新更新