backbone与php交互
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'))); ?>
相关推荐
zyyjay 2020-11-09
xuebingnan 2020-11-05
samtrue 2020-11-22
stefan0 2020-11-22
yifangs 2020-10-13
songshijiazuaa 2020-09-24
hebiwtc 2020-09-18
天步 2020-09-17
83911535 2020-11-13
whatsyourname 2020-11-13
zhouyuqi 2020-11-10
Noneyes 2020-11-10
mathchao 2020-10-28
王志龙 2020-10-28
wwwsurfphpseocom 2020-10-28
diskingchuan 2020-10-23
savorTheFlavor 2020-10-23