首先,我想说,我是一个平面设计师,在第一,所以我真的很抱歉,如果我失去了一些东西真的很愚蠢的,但我可以”自己找出问题:/。PHP + Backbone.js的保存回调保持引发错误
我遇到一个问题,节能与Backbone.js的和PHP模型时。我正在使用Restler来处理PHP调用。
我工作的一个网站,我们将介绍会议的管理员。当我向会议添加发言人时,我会在pl_speakers表中创建一个条目,并且我想要检索其ID以将其添加到相应的会议条目中。
我的PHP代码如下所示:
function post($id = NULL, $request_data = NULL) {
$sql = "INSERT INTO pl_speakers(id, firstName, name, job, site, mail, video, cv) VALUES (
'',
'".$request_data["firstName"]."',
'".$request_data["name"]."',
'".$request_data["job"]."',
'".$request_data["site"]."',
'".$request_data["mail"]."',
'".$request_data["video"]."',
'".$request_data["cv"]."'
)";
$req = $this->db->query($sql);
$response = array("id" => $this->db->lastInsertId());
return json_encode($response);
}
和我的JavaScript看起来像
onAddClick: function(){
var speaker = new speakerModel;
this.speakers.add(speaker);
},
onAddSpeaker: function(speakerModel){
speakerModel.save(speakerModel, { success:$.proxy(this.onSpeakerSaved, this), error: $.proxy(this.onSpeakerNotSaved, this)});
},
onSpeakerSaved: function(speakerModel, response){
console.log(response)
},
当我看着Chrome的网络面板,响应由PHP脚本发送为“{\ “ID \”:\ “128 \”}”,但记录在响应 “onSpeakerSaved” 没有出现,而是我有这样的错误:
Uncaught TypeError: Cannot use 'in' operator to search for 'id' in {"id":"128"}
f.extend.setbackbone-min.js:9
f.extend.save.b.successbackbone-min.js:12
f.extend._Deferred.e.resolveWithjquery-min.js:2
wjquery-min.js:4
f.support.ajax.f.ajaxTransport.send.d
无论PHP函数返回什么(即使它是整个模型),我都会得到这个错误,但如果它不返回任何内容,那么错误消失。
我搜索关于该主题的以前的问题,它似乎是响应必须与一个“id”属性,它是在这里JSON对象,所以我完全卡住,无法揣摩出我错了:/。
再次,如果我失去了一个愚蠢的事情,我真的很抱歉,但我真的很感激,一只手搭在这一个:)
编辑: 这里是整个PHP类,如果它可以的任何帮助,但我觉得这是更多的JavaScript方面,以及如何响应由Backbone处理。我还添加了onAddClick JS方法。
class Speakers {
public $db;
function __construct() {
$this->db = new PDO("mysql:dbname=".DB_NAME.";host=".DB_SERVER, DB_USER, DB_PWD);
}
function get($id=null) {
return is_null($id) ? $this->getAll() : $this->getSpeaker($id);
}
function getAll() {
$sql = "SELECT * FROM pl_speakers";
return $this->getJSON($sql);
}
function getSpeaker($id) {
$sql = "SELECT * FROM pl_speakers WHERE id='".$id."'";
return $this->getJSON($sql);
}
function getJSON($sql) {
$req = $this->db->query($sql);
$data = array();
while($row = $req->fetchObject())
{
$data[] = $row;
}
return json_encode($data);
}
function post($id = NULL, $request_data = NULL) {
$sql = "INSERT INTO pl_speakers(id, firstName, name, job, site, mail, video, cv) VALUES (
'',
'".$request_data["firstName"]."',
'".$request_data["name"]."',
'".$request_data["job"]."',
'".$request_data["site"]."',
'".$request_data["mail"]."',
'".$request_data["video"]."',
'".$request_data["cv"]."'
)";
$req = $this->db->query($sql);
$response = array("id" => $this->db->lastInsertId());
return $this->getSpeaker($this->db->lastInsertId());
}
function put($id = NULL, $request_data = NULL) {
$sql = "UPDATE pl_speakers
SET firstName = '".$request_data["firstName"]."',
name = '".$request_data["name"]."',
job = '".$request_data["job"]."',
site = '".$request_data["site"]."',
mail = '".$request_data["mail"]."',
video = '".$request_data["video"]."',
cv = '".$request_data["cv"]."'
WHERE id = '".$id."'";
$req = $this->db->query($sql);
}
function delete($id = NULL) {
$sql = "DELETE FROM pl_speakers WHERE id='".$id."'";
$req = $this->db->query($sql);
}
更多的代码PLZ,很难弄明白我。 – malletjo
您好racar,感谢您的关注, 我添加了整个php类代码,如果它可以有任何帮助。 我不知道我可以添加什么JS,因为eveything是由Backbone处理.... –