Ajax 网页和服务器怎么互相传值

来源:互联网 发布:创世中文网数据查询 编辑:程序博客网 时间:2024/05/17 08:10

这里使用jquery的封装好的ajax讨论

1.根据我的测试,传送数组是传送不过去的,可以以字符串形式即username=%E5%BC%A0%E4%B8%89&age=18&sex=%E7%94%B7或者对象形势,即{},[{},{}....] 传递

$.ajax({

type : "POST",
url : "./server.php",
data : obj,
dataType : "json",
success : function(data){

}
}); 

案例1:

var obj  = $("form").serialize(); //序列化表单数据

//console.log(obj);  username=%E5%BC%A0%E4%B8%89&age=18&sex=%E7%94%B7



案例2:

var obj = {"a":1, "b":2};

案例3:

var obj = {"list":{"a":1, "b":2}};


案例4:

var obj = {"list":[{"a":1, "b":2},{"c":1, "d":2}]}; 



案例5:

var obj = {"list":{"a":1, "b":2},"as":{"c":1, "d":2}};



案例6:

var obj = {"list" : [{"a":1, "b":2},{"c":1, "d":2}],"sa":[{"a":1, "b":2},{"c":1, "d":2}]};




案例7:

var str = '{"list" : [{"a":1, "b":2},{"c":1, "d":2}],"sa":[{"a":1, "b":2},{"c":1, "d":2}]}';
eval("var obj4="+str);


案例7中的str是json字符串,就是拼接成json格式的一个字符串,还得用eval函数转一下,才能变成json对象,用typeof函数可以明确获取这个串是json,还是个json字符串

一个项目中用到的是案例3中的格式,通信一次就可以传多组数据过去,不然还要循环多次和服务器通信:

var list = {"list":[{"key" : "1-1,5,6,7", "number" : 1}, {"key" : "1-1,5,6,9", "number" : 2}]};


2.然后就是服务器发给网页端的数据了,一般是一维,二维,echo json_ecode(数组),客户端可以这么处理:

①一维数组 

success : function(data){

data.attr_type

}

②二维数组

$(data).each(function(k,v){

v.attr_type 

}

③更复杂的数组

php:

$arr = array(  
            'data' => $data,    //二维数组
            'yxData' => $yxData,    //二维数组
            'pageCount' => $pageCount,     //非数组
         );
       echo json_encode($arr);

js:

success : function(data){

data.yxData // 这样获取的内容就可以用上面提到的二维数组方法处理了

data.pageCount //这样可以直接获取值

}


 

4.Json_encode中文乱码问题,在5.4php版本中已经解决,在之前的版本中,需要先用urlencode,或者干脆自己写一个函数实现json_encode的功能

$testJSON=array('name'=>'中文字符串','value'=>'test'); //echo json_encode($testJSON);  foreach ( $testJSON as $key => $value ) {      $testJSON[$key] = urlencode ( $value );  }  echo urldecode ( json_encode ( $testJSON ) );




5.项目是gbk的要注意:

Ajax默认是utf8的格式传送数据,注意用iconv转一下

案例:项目是gbk编码的,网页端做一个搜索,要输入中文,中文通过ajax提交到服务器,如果不转码,接收到的字符串就是乱码

  $newData=iconv("utf-8","gbk//IGNORE",$data);  

//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。


6.ajax的调试方法

get方式:直接去访问这个ajax模块,带上需要的参数,

http://xxxxxxx/index.php/Home/comment/Getpl?id=2

post的:也是直接去访问这个ajax模块,至于参数,可以在这个模块里面先写好一些测试的数据

http://xxxxxxx/index.php/Home/comment/Getpl

这样调试的好处就是所有报错都能看到,数组结构什么的用var_dump打印出来也很清晰,很好调试



1 0