gpt4 book ai didi

php - 当主干发送的请求方法是删除时,你如何访问php中的数据?

转载 作者:可可西里 更新时间:2023-11-01 08:49:15 24 4
gpt4 key购买 nike

我是第一次使用 backbone.js,我正在与 php 和 mysql 结合使用,这样我就可以使用 backbone 从数据库发送和接收数据,我遇到了删除请求方法的问题。我无法像使用 post 和 put 那样访问随请求方法一起发送的数据。 POST 和 PUT 在此脚本中完美运行,只是删除我遇到了问题。

这是我的代码。

Hello World .js

(function($) {

var Item = Backbone.Model.extend({
url: 'http://mysite.com/syncItem.php',
defaults: {
part1: 'hello',
part2: 'world',
}
});

var List = Backbone.Collection.extend({
model: Item
});

var ItemView = Backbone.View.extend({
tagName: 'li',
events: {
'click span.swap': 'swap',
'click span.delete': 'remove'
},

initialize: function() {
_.bindAll(this, 'render', 'unrender', 'swap', 'remove');

this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
},

render: function() {
$(this.el).html('<span style="color:black;">' + this.model.get('part1') +' '+this.model.get('part2')+'</span> &nbsp; &nbsp; <span class="swap" style="font-family:sans-serif; color:blue; cursor:pointer;">[swap parts]</span> <span class="delete" style="cursor:pointer; color:red; font-family:sans-serif;">[delete]</span>');
return this;
},

unrender: function() {
$(this.el).remove();
},

swap: function() {
var swapped = {
part1: this.model.get('part2'),
part2: this.model.get('part1')
};
this.model.set(swapped);
this.model.sync("update", this.model);
},

remove: function() {
this.model.sync("delete", this.model); //deletes Item from server DB
this.model.destroy(); //deletes Item from collection
}
});

var ListView = Backbone.View.extend({
el: $('div#backboneContainer'),

events: {
'click button#add': 'addItem'
},

initialize: function() {
_.bindAll(this, 'render', 'addItem', 'appendItem');

this.collection = new List();
this.collection.bind('add', this.appendItem);

this.counter = 0;
this.render();
},

render: function() {
var self = this;
$(this.el).append("<button id='add'>Add List Item</button>");
$(this.el).append("<ul></ul>");
},

addItem : function() {
this.counter++;
item = new Item({id: this.counter});
item.set({
part2: item.get('part2') + this.counter
});
this.collection.add(item);
item.sync("create", item);
},

appendItem: function() {
var itemView = new ItemView({
model: item
});
$('ul', this.el).append(itemView.render().el);
}
});

var listView = new ListView();
})(jQuery);

syncItem.php

<?php
include("includes/openDbConn.php");
$request_method = strtolower($_SERVER['REQUEST_METHOD']);
switch($request_method) {
case 'post': {
$data = json_decode(file_get_contents('php://input'));
if($stmt = $mysqli->prepare("INSERT INTO backbonetest (modelId, part1, part2) VALUES (?, ?, ?)"))
{
$stmt->bind_param("iss", $data->{'id'}, $data->{'part1'}, $data->{'part2'});
$stmt->execute();
}
break;
}
case 'get': {
//NOT FINISHED
break;
}
case 'put': {
$data = json_decode(file_get_contents('php://input'));
if($stmt = $mysqli->prepare("UPDATE backbonetest SET part1 = ?, part2 = ? WHERE modelId = ?"))
{
$stmt->bind_param("ssi", $data->{'part1'}, $data->{'part2'}, $data->{'id'});
$stmt->execute();
}
break;
}
case 'delete': {
$data = json_decode(file_get_contents('php://input')); //gets data from the json that was sent with the request
if($stmt = $mysqli->prepare("DELETE FROM backbonetest WHERE modelId = ?"))
{
$stmt->bind_param("i", $data->{'id'});
$stmt->execute();
}
break;
}
}
?>

我已经将错误的范围缩小到两个位置:我调用 this.model.sync("delete", this.model);$data = json_decode(file_get_contents ('php://input')); 在删除的情况下。所以我想知道在处理删除请求方法时是否有一种特殊的方式来访问数据,或者我只是错误地调用了主干中的删除函数?

最佳答案

你有一个未实现的期望问题:) DELETE Backbone 中的请求默认情况下不会发送属性作为 POST, PUTPATCH do1 :比较此 Fiddle 中 model.savemodel.destroy 发送的请求 http://jsfiddle.net/fz68a/

您可以覆盖 Item.sync 以赋予它您期望的行为:

var Item = Backbone.Model.extend({
defaults: {
part1: 'hello',
part2: 'world'
},

sync: function (method, model, options) {
if (method === 'delete') {
options = options || {};
options.contentType = 'application/json';
options.data = JSON.stringify(this.toJSON());
}

return Backbone.sync.call(this, method, model, options);
}
});

还有一个演示 http://jsfiddle.net/fz68a/1/


1 查看主干源代码 http://documentcloud.github.io/backbone/docs/backbone.html#section-139

关于php - 当主干发送的请求方法是删除时,你如何访问php中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com