前言:

ajax的出现,一定程度上改变了js的命运,同时也被广泛使用,而jq的兴起也大大降低了ajax的使用难度。虽然,jq的ajax方法使用起来十分便利,但是大部分开发人员也仅仅只是对其中的几个属性比较熟悉,当然也包括我。其中用的最多的是url、data、dataType、type、success、error和complete这几个,完整的代码格式如下:

$.ajax({

  url: '/ajax/getInfo',

  type: 'GET', //或POST

  data: { name: 'jack' },

  dataType: 'json',

  success: function(d){},

  error: function(e){},

  complete: function(){}

});

这里我就不一一赘述上面每个属性的意思了,不知道的可以查询jq的API。

在大部分情况下基本上是不会出问题的,但是遇到一些特殊情况时,后台常常拿不到数据,这是为什么呢?

正文:

首先,我们修改一下传输到后台的数据格式

$.ajax({

  url: '/ajax/getInfo',

  type: 'POST', //这里以POST为例,GET请求的接收方式各不相同所以这里不进行讨论

  data: {

    name: 'jack' ,

    friends: [{

      name: 'rose',

      sex: 'female'

    },{ 

      name: 'lily',

      sex: 'female'

    }]

  },

  dataType: 'json',

  success: function(d){},

  error: function(e){},

  complete: function(){}

});

以下说明完全是基于使用框架的接收方式,不涉及自己编写的接收器(如果完全是自己手动编写代码接收的话任意格式数据均能接收)。

如果是以上形式的数据格式(这里我们将其称为“复杂数据格式”)在JAVA的Spring MVC框架中是无法接收的,同样Nodejs的Express框架也无法接收。

既然以上的复杂数据格式无法接收,那么我们就需要找到一种能够正确接收的方式。

经过查阅网上的资料我发现将json数据转换成json字符串,并且在ajax的配置项中加入contentType即可,如下:

var sendData =

{

  name: 'jack' ,

  friends: [{

    name: 'rose',

    sex: 'female'

  },{ 

    name: 'lily',

    sex: 'female'

  }]

};

$.ajax({

  url: '/ajax/getInfo',

  type: 'POST', //这里以POST为例,GET请求的接收方式各不相同所以这里不进行讨论

  data: JSON.stringify(sendData),

  contentType: "application/json;charset=utf-8", //默认的contentType为application/x-www-form-urlencoded; charset=utf-8

  dataType: 'json',

  success: function(d){},

  error: function(e){},

  complete: function(){}

});

总结:

如果使用简单的json格式进行POST请求时,我们不需要做什么特殊处理,但是如果要将复杂数据格式传给后台时,我们必须将数据转换成字符串,然后ajax配置项中加入contentType: "application/json;charset=utf-8"。

ajax通讯之格式详解的更多相关文章

  1. 以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解

    转载:http://www.cnblogs.com/lifan3a/articles/6649970.html 以太网帧格式.IP数据报格式.TCP段格式+UDP段格式 详解   1.ISO开放系统有 ...

  2. java分享第十五天(log4j 格式详解)

    log4j 格式详解  log4j.rootLogger=日志级别,appender1, appender2, -. 日志级别:ALL<DEBUG<INFO<WARN<ERRO ...

  3. php 序列化(serialize)格式详解

    1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...

  4. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  5. jQuery Pagination Ajax分页插件中文详解(摘)

    jQuery Pagination Ajax分页插件中文详解 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxin ...

  6. Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  7. PNG,JPEG,BMP,JIF图片格式详解及其对比

    原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...

  8. binlog之四:mysql中binlog_format模式与配置详解,binlog的日志格式详解

    mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

随机推荐

  1. 新手之自动转存DLL——20150626星期五

    -------------------菜鸟错例一:--------------------------------------------- int a=0; if() { int a = GetTy ...

  2. “System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常---解决方案

    "System.Data.SqlClient.SqlConnection"的类型初始值设定项引发异常 问题出在了 .net 的C:\WINDOWS\Microsoft.NET\Fr ...

  3. Matlab 进阶学习记录

    最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal  =  proposal_config('image_means', ...

  4. maven 私服搭建

    1,下载 https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01-bundle.zip 2,解压 3,安装 ...

  5. form表单修改label样式

    <?php $form = ActiveForm::begin([ 'options'=>['enctype'=>'multipart/form-data','class' => ...

  6. netty研究【1】:编译源代码

    netty作为异步通信底层框架,其优异的性能让我产生了研究他的源码的决定. 代码研究之前,第一步就是要准备环境,至少可以编译通过,下面,就拿github上的4.1分支进行.我的IDE是Intellij ...

  7. winform基本控件的使用2(用户登录界面的设计)

    首先还是通过例子来讲解,这次的实验主要是使用messageBox的使用方法,关于messageBox的使用方法在我的博客里面有相关的转载,请自己查看,下面说一下实验要求. 功能要求:模拟一个用户登陆的 ...

  8. Python与PHP通过XMLRPC进行通信

    Python与PHP通过XMLRPC进行通信:服务器端用Python,客户端用PHP. 服务器端:xmlrpc_server.py #!/usr/bin/python # coding: UTF-8 ...

  9. javascript判断某种元素是否进入可视区域

    判断是否在指定的可视区域内,先用最简单的方式,比如整个页面为可视区域 找到几个关键因素: sTop= $(window).scrollTop();  //滚动条距顶部的高度 clientHeight= ...

  10. Windows服务器上使用bat定时执行php

    windows上和linux上有一个类似的cmd和bat文件,bat文件类似于shell文件,执行这个bat文件,就相当于依次执行里面的命令(当然,还可以通过逻辑来实现编程),所以,我们可以利用bat ...