【问题标题】:Passing HTTP Request from Backbone.js to CodeIgniter to DB将 HTTP 请求从 Backbone.js 传递到 CodeIgniter 到 DB
【发布时间】:2011-08-10 02:40:06
【问题描述】:

我正在尝试使用 Philip Sturgeon @http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/ 编写的 RESTful api 将 Backbone.js 中的模型同步到 Codeigniter 我正在尝试向用户资源组添加一个条目。问题是:我会得到一个新条目,但标题会是 0 而不是“Hello World!!!” 我相信故障在控制器中的 'title'=>$this->post('title') 处,因为当我用 'title'=>"FOO" 替换它时,Foo 将出现在数据库中。有什么想法吗? 顺便说一句,我应该将 URL 作为主干.js 中的 URL

url: "MyApp/index.php/app/user"    or
url: "MyApp/index.php/app/user/id/(xxx)"

Backbone.js

$(document).ready(function(){
var Item = Backbone.Model.extend({

defaults: {
  title: "Hello World!!!"
},

url: "MyApp/index.php/app/user"

});
var item=new Item;  
item.save();

app.php(控制器)

function user_post()
{
    $data=array(
    'id'=> NULL,
    'title'=>$this->post('title')
    );

    $result = $this->App_Model->create($data);
}

app_model.php(模型)

function create($data)
{

    $query = $this->db->insert('data', $data)
}

更新::

这是来自 Chrome Inspector

请求方法:POST

状态码:200 OK

请求标头查看源代码

Accept:application/json, text/javascript, /; q=0.01

连接:保持活动状态

内容长度:15

内容类型:应用程序/json

X-Requested-With:XMLHttpRequest

请求负载{“title”:“我的内容!!”}

【问题讨论】:

  • 请求方法:POST 状态码:200 OK Request Headersview source Accept:application/json, text/javascript, /; q=0.01 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 连接: keep-alive Content-Length:15 Content-Type:application/json Host:www.williamsham.com X-Requested-With:XMLHttpRequest Request Payload {“title”:“my Content!!”}

标签: javascript codeigniter http-headers backbone.js


【解决方案1】:

我也遇到了一些问题。我的解决方案:

$data = json_decode(file_get_contents('php://input'), true);
$this->site_model->create($data);

【讨论】:

    【解决方案2】:

    你需要在你的 Controller 下修改这一行:

    $this->post('title')
    

    $this->input->post('title')
    

    或者实际上您可以使用普通 PHP 来访问您的 POST 全局变量,例如 $_POST['title']。

    作为参考,请查看CodeIgniter's Input Class

    【讨论】:

      【解决方案3】:

      我不太确定为什么您的标题参数没有通过。我建议使用 Firebug 或 Chrome Inspector 来检查标题参数是否真的被发送了。您可以从那里缩小调试范围。

      对于 URL,RESTful 的方式是使用 MyApp/index.php/app/user/id" 来管理单个用户

      编辑

      您的请求似乎已正常发送。我会检查帖子数据。为什么不打印发布数据,看看收到了什么。我的猜测是 PHP 没有正确读取 JSON 数据。您可以使用 $decoded = json_decode($this->post('title')) 将其转换为 php 对象。

      【讨论】:

      • 我已经从 Chrome Inspector 中添加了一些东西......基于此......你认为错误的根源在哪里?
      【解决方案4】:

      使用$this->input->post('title'); 怎么样? (Reference)

      【讨论】:

        【解决方案5】:

        尝试访问

        $this->request->body
        

        它应该包含您通过 Backbone.js 发布的所有值的内容

        【讨论】:

          猜你喜欢
          • 2020-04-11
          • 1970-01-01
          • 2015-05-19
          • 2012-06-21
          • 1970-01-01
          • 2015-12-21
          • 1970-01-01
          • 2021-01-02
          • 2015-12-07
          相关资源
          最近更新 更多