做课程设计,用到了jquery的ajax方法,作为一只小菜鸟,$ajax()卡了我一上午。我选择请求的方式是POST。
第一个问题:服务器一直接受不到ajax传过来的数据,php脚本打印$_POST一直为空。
原因:Content-Type: application/json;charset=utf-8 ,意思是用来告诉服务端消息主体是序列化后的 JSON 字符串。然而有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 php 框架已经开始这么做了。
搞了很久查到了资料,菜鸟~菜鸟~ 为此提供一个关于Content-Type的科普文章:http://zccst.iteye.com/blog/2180127
第二个问题:服务器成功接收数据了,但ajax一直无法调用success方法,总是进入到error方法中。
原因:出现上面这个错误有两种可能性:
1. 返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}
2. 请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){***} ”
我属于第一种错误,我定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,然而从服务器我还返回了其他类型的数据,所以一直进入error。同时还需要在返回数据的时候声明数据类型,例如对于php语言:header('Content-type: text/json');