ajax在浏览器和服务器端传输数据的本质是文本内容(不支持二进制数据),这些文本内容可以是json、xml、html或者纯文本格式,浏览器端把服务端返回的文本内容转为JavaScript的json对象、xml对象或者html对象。目前主流的JavaScript库都提供了ajax请求的封装,以jQuery为例。

$.ajax({
    url: 'http://请求路径',data: {},// 请求参数,没有可以不写
    dataType: 'json',//支持json、xml、html、text、jsonp等
    type: 'get',//有get和post两种请求,默认是get
    timeout: 60000          //ajax请求超时
}).done(function(data){
    //ajax请求成功回调函数
}).fail(function(){
    //ajax请求失败回调函数
});

jQuery通过dataType把返回的数据转成相应的JavaScript对象,因此我们在使用过程中无需手动进行转换,只要在回调函数中使用即可。如果把ajax请求的路径以及参数通过url直接在浏览器输入,即可看到返回的文本数据,如图所示。


json

目前绝大部分的ajax请求的数据都是json格式,在某种程度上ajax基本上和json绑定在一起使用,以至于给人一种错觉就是ajax就是处理json数据。其实json只是一种数据格式,跟ajax并没有必然的联系,json数据需要在JavaScript中转换成对象实例(目前大部分浏览器都内置了JSON.parse()方法,也可以用jQuery的$.parseJSON()方法)。

下面用$.ajax()请求json数据,由于jQuery自动把数据转成json对象,因此把dataType指定为text。

$.ajax({
    url: 'http://localhost:8280/logweb/test/json.do',dataType: 'text'
}).done(function(text){
    console.dir(arguments);
    //text的类型
    console.dir('text的类型是:' + Object.prototype.toString.call(text));
    console.dir(text);

    var json = $.parseJSON(text);
    console.dir('json的类型是:' + Object.prototype.toString.call(json));
    console.dir(json);
});

从浏览器控制台输出的结果可知,text是字符串,json是Object对象。



xml

ajax也可以处理xml数据,确切的说是JavaScript也能处理xml数据。下面用$.ajax()请求xml数据,由于jQuery自动把数据转成xml对象,因此把dataType指定为text。

$.ajax({
    url: 'http://localhost:8280/logweb/test/xml.do',dataType: 'text'
}).done(function(text){
    console.dir(arguments);
    //text的类型
    console.dir('text的类型是:' + Object.prototype.toString.call(text));
    console.dir(text);

    var xml = $.parseXML(text);
    console.dir('xml的类型是:' + Object.prototype.toString.call(xml));
    console.dir(xml);
});

从浏览器控制台输出的结果可知,text是字符串,xml是XMLDocument对象。



html

ajax也可以接收html,通常html都是直接插入其他html元素中。

$.ajax({
    url: 'http://localhost:8280/logweb/test/html.do',dataType: 'text'
}).done(function(text){
    console.dir(arguments);
    //text的类型
    console.dir('text的类型是:' + Object.prototype.toString.call(text));
    console.dir(text);

    var html = $.parseHTML(text);
    console.dir(html);

    //把html附加到body
    $(document.body).append(html);
});


自定义数据格式

json、xml和html都是标准格式,也可以自定义格式。下面返回用(,)分隔的自定义数据格式,相对于json等标准格式,自定义格式不易被理解。

$.ajax({
    url: 'http://localhost:8280/logweb/test/custom.do',dataType: 'text'
}).done(function(text){
    console.dir(arguments);
    //text的类型
    console.dir('text的类型是:' + Object.prototype.toString.call(text));
    console.dir(text);

    var data = {},items = text.split(',');
    $.each(items,function(i,v){
        var parts = v.split('_');
        data[parts[0]] = parts[1];
    });

    console.dir(data);
});


jsonp

jsonp并不属于ajax,jsonp和ajax实现的原理不一样,jsonp的出现只是为了弥补ajax不能跨域请求的缺点(ajax不能跨域请求是浏览器做的限制)。虽然jsonp不属于ajax,jQuery为了方便还是把jsonp放在ajax方法里调用,把dataType设置为jsonp即可。

$.ajax({
    url: 'http://localhost:8280/logweb/test/jsonp.do',dataType: 'jsonp'
}).done(function(data){
    console.dir('data的类型是:' + Object.prototype.toString.call(data));
    console.dir(data);
});






服务端

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alibaba.fastjson.JSON;

@Controller
@RequestMapping("/test")
public class TestController {

    /** * 返回json * * @param response */
    @RequestMapping("/json.do")
    public void json(HttpServletResponse response) {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        // 构造json
        Map<String,Object> json = new HashMap<String,Object>();
        json.put("date",new Date());
        json.put("name","小明");
        json.put("age",18);

        try {
            // 这里用FastJSON生成JSON字符串
            response.getWriter().write(JSON.toJSONString(json));
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

    /** * 返回xml * @param response */
    @RequestMapping("/xml.do")
    public void xml(HttpServletResponse response) {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        //用Dom4j构造xml
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("root");
        root.addElement("date").setText(new Date().getTime() + "");;
        root.addElement("name").setText("小明");
        root.addElement("age").setText("18");

        try {
            response.getWriter().write(doc.asXML());
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

    /** * 返回html * @param response */
    @RequestMapping("/html.do")
    public void html(HttpServletResponse response) {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        String html = "<div>" + new Date().toString() + "</div><div>姓名:小明</div><div>年龄:18岁</div>";

        try {
            response.getWriter().write(html);
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

    /** * 自定义格式 * @param response */
    @RequestMapping("/custom.do")
    public void custom(HttpServletResponse response) {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        String str = "date_" + new Date().toString() + "," + "name_小明,age_18";

        try {
            response.getWriter().write(str);
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

    /** * jsonp数据 * @param callback jsonp的回调函数名称 * @param response */
    @RequestMapping("/jsonp.do")
    public void jsonp(String callback,HttpServletResponse response) {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        // 构造json
        Map<String,18);

        //拼接jsonp
        StringBuilder str = new StringBuilder();
        str.append(callback);
        str.append("(");
        str.append(JSON.toJSONString(json));
        str.append(");");

        try {
            response.getWriter().write(str.toString());
        } catch (IOException e) {
            e.printstacktrace();
        }
    }
}

ajax数据类型分析的更多相关文章

  1. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  2. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  3. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  4. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  5. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

  6. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  7. ios – 保存从查询中获取的用户的属性(即不在currentUser上)

    我有兴趣根据currentUser执行的操作将属性保存到数据库中的用户.基于以下代码,我收到错误消息“除非已通过logIn或signUp验证用户,否则无法保存用户”我想知道是否有一个解决方法,我可以将属性保存到foundUser,而无需登录该用户.谢谢你的帮助!解决方法如果要更新当前不是登录用户的用户,则需要使用主密钥调用Parse.您可以从CloudCode执行此操作;并从您的iOS项目中调用它;

  8. 在iOS中使用NSJSONSerialization进行JSON解析

    解决方法首先在您的JSON响应字典中,在“RESPONSE”键下,您有一个数组而不是字典,该数组包含字典对象.所以要提取用户名和电子邮件ID,如下所示

  9. Xcode:Alamofire获得String响应

    我是IOS开发的新手,目前正在与Alamofire学习网络我正在尝试登录…每当凭证正确时,.PHP文件返回一个json,我可以通过以下代码从Alamofire获取json:现在……当凭证错误时,.PHP不会给json..而且它返回一个字符串..例如“wrong_password”或“userLocked”等等……如何通过Alamofire获得String响应?解决方法如果您希望JSON响应使用.responseJSON,如果您想要String响应,请使用.responseString.如果你想两者同时使用

  10. ios – 全局变量中的Appdelegate in swift

    我将一些数据从viewcontroller&从另一个视图控制器获取它.下面是应用程序委托的代码代码设置mainDic代码来获取字典.问题是我得到的输出没有.请让我正确.解决方法这是你的错误尝试将您的代码更改为此

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部