【问题标题】:Laravel 4 Jquery Ajax Json data requestLaravel 4 Jquery Ajax Json 数据请求
【发布时间】:2013-07-16 06:32:13
【问题描述】:

我有一个 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 数据处理。建议?谢谢!

【问题讨论】:

  • 你没有收到 500 错误吗?
  • 不,它只是不返回任何东西。如果我用return $a替换return $a ['font_family'],它会输出2。我想我盯着这个有点太久了,但我想我可以在解码后访问$ a,就好像它是一个数组一样...
  • 尝试使用正确的标头和 JSON 结构从控制器返回:return Response::json(array($a['font_family']));

标签: jquery ajax json laravel


【解决方案1】:

我认为这是因为您在 ajax 中使用 PUT 作为请求方法,但 LaravelPOST 用于 PUT 请求并通过发送隐藏字段来模仿 PUT 请求:

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

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

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

还可以查看this thread 关于 PUT、DELETE 等方法和浏览器支持的信息。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2014-02-14
    • 1970-01-01
    • 2014-02-15
    • 2020-01-11
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多