`
flex_莫冲
  • 浏览: 1075693 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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')));  
?>
分享到:
评论
2 楼 flex_莫冲 2015-02-16  
a2631500 写道
"看了源码,设置Backbone.emulateJSON=true可更改contentType。但是我设置过依然没变。 "

实际上是有效的,详见:http://dfhuo.com/wordpress/?p=756


多谢分享。
1 楼 a2631500 2015-02-13  
"看了源码,设置Backbone.emulateJSON=true可更改contentType。但是我设置过依然没变。 "

实际上是有效的,详见:http://dfhuo.com/wordpress/?p=756

相关推荐

    JS MVC框架(BackBone)

    JS MVC框架(BackBone),主要包括两层:Model 和 View. Model 是用于数据交互 View 是用于界面显示的

    developing backbone js applications

    Learn how Backbone.js brings MVC benefits to the client-side Write code that can be easily read, structured, and extended Work with the Backbone.Marionette and Thorax extension frameworks Solve ...

    backbone 资料

    backbone 资料

    BACKBONE.JS应用程序开发

    backbone.js提供了一套web开发的框架,为复杂javascript应用程序提供一个mvc结构。, 《backbone.js应用程序开发》详细介绍了如何使用backbone.js完成web应用开发。全书从了解mvc、spa和backbone.js的基本知识开始,...

    Backbone.js应用程序开发

    backbone.js提供了一套web开发的框架,为复杂javascript应用程序提供一个mvc结构。, 《backbone.js应用程序开发》详细介绍了如何使用backbone.js完成web应用开发。全书从了解mvc、spa和backbone.js的基本知识开始,...

    backbone-boilerplate, 一组用于构建 backbone.js 应用程序的最佳实践和实用工具.zip

    backbone-boilerplate, 一组用于构建 backbone.js 应用程序的最佳实践和实用工具 Backbone 模板这个样板是许多研究和挫折的产物。 现有的boilerplates修改 Backbone 核心,没有构建过程,或者者是非常规范的,这样的...

    backbone.js 1.1.2

    backbone.js 1.1.2

    Java 演示 backbone 基本用法

    Java 演示 backbone 基本用法 View Model Collection

    backbone marionette js

    Learn how Backbone.js brings MVC benefits to the client-side Write code that can be easily read, structured, and extended Work with the Backbone.Marionette and Thorax extension frameworks Solve ...

    backbone官方Todo示例

    backbone官方Todo示例内含自己详细注释,建议运行之后打开浏览器调试同步学习。

    react-backbone, Backbone 感知mixin用于响应和更多.zip

    react-backbone, Backbone 感知mixin用于响应和更多 反应中枢为 Backbone 提供对你的的响应,以响应你的组件,。将 backbone/backbone 。集合感知awareness你的反应组件mixin用于更新模型更改事件,请注意xhr活动和...

    backbone中文api

    backbone中文api

    backbone文档

    Backbone.js初学者教程(1) 作者: 阿伦 日期: 2012 年 3 月 15 日 分类: Javascript标签: Backbone.js, Javascript, Tutorial, 前端开发, 结构化 最近在google trends上看了backbone.js近些年的搜索指数:

    backbone实例demo

    backbone+seajs实战

    backbone-boilerplate, 用于构建 Backbone 应用程序的工作流.zip

    backbone-boilerplate, 用于构建 Backbone 应用程序的工作流 Backbone 模板这个样板是许多研究和挫折的产物。 现有boilerplates自由修改 Backbone 核心,缺少构建过程,并且非常规范;Backbone 样板文件的变更。...

    backbone-localstorage.js

    backbone的扩展库backbone-localstorage.js

    backbone 实例

    backbone的API 及实例

    backbone_api_frame

    backbone+extjs 开发的API框架

    backbone整合require例子

    backbone官网的todos demo,用require进行模块划分,个人感觉就是把前端写的跟后端代码一样,每个文件都注明要引用的模块文件,类似java的import。

Global site tag (gtag.js) - Google Analytics