在laravel应用程序中返回405(不允许POST)的jQuery ajax请求

时间:2014-09-09 04:26:12

标签: javascript php ajax laravel laravel-4

我似乎无法弄清楚这一点。这是apache配置吗?我已经看到一些filters.php配置来添加POST,但如果这是问题,它会在laravel docs中的某个地方,对吧?

路线:

Route::get('orders/add', 'OrderController@add');
Route::resource('orders', 'OrderController');

控制器(REST方法为空):

class OrderController extends \BaseController {
   public function add()
    {
       if (Request::ajax())
           return "ajax request ";
       else 
           return "not ajax";
    }
...

jQuery的:

function add()
{
   var tid = $('#sites input[type=radio]:checked').attr('id');

   $.ajax({
      type: "POST",
      url: 'add',
      data: { tid: tid }
   }).done( function (msg){
      alert(msg);
   });
}

要发送的按钮:

<button onclick="add()" id="formSubmit"> Carrinho </button>

当我点击按钮时,错误firefox会在控制台上显示错误:

POST http://localhost/orders/add [HTTP/1.0 405 Method Not Allowed 17ms]

谢谢大家。

2 个答案:

答案 0 :(得分:3)

Route::get需要一个GET HTTP标头。你需要使用Route::post

而不是

Route::get('orders/add', 'OrderController@add');

你应该使用

Route::post('orders/add', 'OrderController@add');

Source: Laravel routing documentation

答案 1 :(得分:1)

如果你使用的是资源控制器,你真的不需要/ add路由,因为它已经有了一个创建方法。

OrdersController extends BaseController {
    public function index() {} // show ALL orders
    public function create() {} // show the form to create an order aka "add"
    public function store() {} // get input from post.
    public function update($order_id) {} // update an order resource 
    public function destroy($order_id) {} // destroy an order resource
}

在您的ajax中,将网址更改为url: {{URL::route('orders.store')}},并且应该修复它。