0

我有一个 jquery ajax 请求:

  var settingsContainer = {};
  settingsContainer.font_family = $j("#supercontainer").css("font-family");


  var settingsContainerJson = JSON.stringify(settingsContainer);

  var BASE = "<?php echo Request::Root(); ?>/";
  return $j.ajax
  ({
  type: 'PUT',
  dataType: 'JSON',
  data: { settingsContainer: settingsContainerJson },
  url: BASE+'pages/update/{{ $page_id }}',
  success: function(data)
  { 
    alert(data);
  }
  });

这转到我的路由:

Route::put("/pages/update/{id}", array('as'=>'ajax', 'uses'=>'PageController@putSave'));

这就是我的控制器:

public function putSave($id) {
    $a = json_decode(Input::get('settingsContainer'));
    return $a['font_family'];
}

这目前在 Laravel 4 中不返回任何内容。如果我在我的 jquery 调用中删除 dataType: json ,它确实返回了一些东西,所以它似乎以某种方式中断了 JSON 数据处理。建议?谢谢!

4

1 回答 1

0

我认为这是因为您PUTajaxas 请求方法中使用但Laravel用于POST请求并通过发送隐藏字段来PUT模仿请求:PUT

<input type="hidden" name="_method" value="PUT" />

这是由表单中的方法自动生成/附加的Form::open(),由于您使用的是ajaxand json,因此您应该_method:'PUT'在您的内部添加data并将其更改为type:'PUT'type:'POST'以便它可以在$_POST数组中使用并且Laravel可以完成工作(作为 PUT 请求)。所以,你data应该是这样的:

{
    type: 'POST',
    dataType: 'JSON',
    data: { settingsContainer:settingsContainerJson, _method:'PUT' },
    // ...
}

还要检查有关 PUT、DELETE 等方法和浏览器支持的线程。

于 2014-03-01T22:23:46.480 回答