设为首页 收藏本站
查看: 594|回复: 0

[经验分享] backbone与php交互

[复制链接]

尚未签到

发表于 2017-3-23 10:36:57 | 显示全部楼层 |阅读模式
backbone通过save保存数据到服务器端,通过fetch从服务器端获取数据。两者执行时都会调用sync函数,而不会执行服务器端操作。因此,除非是自定义的sync操作(如采用websocket等非ajax方式提交),否则不需要覆盖sync函数。
问题1:php不能通过$_POST获取参数
save默认提交的是post方式,application/json的content-type,但是php的$_post只能接收Content-Type: application/x-www-form-urlencoded提交的数据,因此不能使用该方式获取参数。而采用file_get_contents("php://input")来获取
看了源码,设置Backbone.emulateJSON=true可更改contentType。但是我设置过依然没变。
问题:fetch可以传递参数吗?
当然可以。在fetch的options参数中设置data属性,传入jsonString参数。还可以通过type设置ajax的类型。默认是get。

if (Backbone.emulateJSON) {
params.contentType = 'application/x-www-form-urlencoded';
params.data = params.data ? {model: params.data} : {};
}


html代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="lib/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="lib/underscore-min.js" type="text/javascript"></script>
<script src="lib/backbone-min.js" type="text/javascript"></script>
</head>
<body>
</body>
<script>
(function ($){
//model 默认name
Man = Backbone.Model.extend({
//构造函数
initialize :function(){
//alert("you create me");
//监听属性更改事件
this.bind("change:name",function(){
var name = this.get("name");
alert("you change name to " + name);
})
this.bind("error",function(model,error){
//alert(error);
})
},
url:"save.php",
//Backbone 每次向服务器读取或保存模型时都要调用执行的函数 默认是jquery.ajax方式。
// sync:function(method, model) {
// //method会更具save的不同而改变,create,update,delete,read
// alert(method + ": " + JSON.stringify(model));
// model.id = 1;
// },
//默认属性
defaults:{
name:'david',
age:30
},
aboutMe:function(){
return "my name is " + this.get("name") + "今年" + this.get("age") + "岁";
},
validate:function(attributes){
if(attributes.name == "fuck"){
return "name is error!";
}
}
});
var man = new Man;
//实例更改属性
man.set({name:"andy"});
//save会执行Backbone.sync 若model定义了sync则不会执行服务器请求
man.save({success:function(model,response){
console.log(response);
}},{error:function(err){
console.log("err");
}});
// man.save({name: "luky"});
//从php服务器端获取返回数据 若model定义了sync则不会执行服务器请求
//从php服务器端获取返回数据
var man1 = new Man();
man1.fetch({
url:"fetch.php",
type:"POST",
data:"name=John&location=Boston",
success:function(model,response){
alert(response.name);
},
error:function(err){
console.log("err");
}
});

})(jQuery);
</script>
</html>


save.php

<?php
header('Content-Type: application/json; charset=utf-8');  
//不能通过$_POST获取。因为$_POST['paramName'] 只能接收Content-Type: application/x-www-form-urlencoded提交的数据
$man = json_decode(file_get_contents("php://input"));
file_put_contents("data.txt", $man->name);
echo true;  
?>


fetch.php

<?php
header('Content-Type: application/json; charset=utf-8');  
file_put_contents("data.txt", $_POST["name"]);
die(json_encode(array('name'=>'tom')));  
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354007-1-1.html 上篇帖子: PHP导出XML文件 下篇帖子: PHP开发Eaby API起步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表