$.ajax dataType设置为json 回调函数不执行
请求方式如下:
- $.xpost = function (url, data) {
- return $.ajax({
- url: url,
- type: "POST",
- dataType: "json",
- contentType: "application/json",
- data: JSON.stringify(data)
- });
- };
在service中调用请求
- class Service {
- //保存订单
- saveOrder(order){
- let url = config.rootUrl +'/order/main/saves';
- return $.xpost(url, JSON.stringify(order));
- }
- }
- let service = new Service();
在view中调用service里面的savaOrder方法
- service.saveOrder(order).then((result)=>{
- if(result.status == 1){
- $("#cashPayBox").modal('hide');
- if(order.status == 12){
- //支付完成,当前单据完结
- //流水号递增1
- this.baseInfo.serialNo += 1;
- $(".cashier").databind(this.baseInfo);
- //清空面板关于挂起订单的信息
- this.page.clearOrderInfo();
- this.page.order = {};
- this.page.item = {};
- }else{
- service.getOrder(orderNo).then((orderInfo)=>{
- $.tryInvoke(this.setCurrentOrder,this,orderInfo);
- //更新支付金额区域显示金额
- this.changePayAmount(0.00,amount,payway)
- });
- }
- }else{
- }
- });
向服务器发送请求,请求正确返回,状态是200,没看到报错。但是就是不执行后面then里面的回调方法。
查询jQuery api,看到里面的解释:
dataType (default: Intelligent Guess (xml, json, script, or html)
)
"xml"
: 返回 XML 文档,可以通过 jQuery 处理。"html"
: 返回纯文本 HTML 文本;包含的script标签会在插入DOM时执行。"script"
: 把响应的结果当作 JavaScript 执行,并将其当作纯文本返回。默认情况下会通过在URL中附加查询字符串变量 ,_=[TIMESTAMP]
, 禁用缓存结果,除非设置了cache
参数为true
。注意: 在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(愚人码头注:因为将使用DOM的script标签来加载)"json"
:把响应的结果当作 JSON 执行,并返回一个JavaScript对象。跨域"json"
请求转换为"jsonp"
,除非该请求在其请求选项中设置了jsonp:false
。JSON 数据以严格的方式解析; 任何畸形的JSON将被拒绝,并且抛出解析错误信息。在jQuery1.9中,一个空响应也将被拒绝;服务器应该返回null
或{}
响应代替。(见json.org的更多信息,正确的JSON格式。)"jsonp"
: 以 JSONP 的方式载入 JSON 数据块。会自动在所请求的URL最后添加"?callback=?"
。默认情况下会通过在URL中附加查询字符串变量 ,_=[TIMESTAMP]
, 禁用缓存结果,除非设置了cache
参数为true
。"text"
: 返回纯文本字符串。
我的ajax请求里面的dataType设置的是json,查看后台返回的是一个String,估计问题应该出在这里。把后台返回改成了Map键值对。再一试,发现可以进入回调函数了。
Data Types(数据类型)
$.ajax()
调用不同类型的响应,被传递到成功处理函数之前,会经过不同种类的预处理。 预处理的类型取决于由更加接近默认的Content-Type响应,但可以明确使用dataType
选项进行设置。如果提供了dataType
选项, 响应的Content-Type头信息将被忽略。
有效的数据类型是text
, html
, xml
, json
,jsonp
,和 script
.
如果指定的是text
或 html
, 则不会预处理。 这些数据被简单地传递给成功处理函数, 并通过该jqXHR
对象的responseText
属性获得的。
如果指定的是xml
, 响应结果作为XMLDocument
,在传递给成功处理函数之前使用jQuery.parseXML
进行解析。 XML文档是可以通过该jqXHR
对象的responseXML
属性获得的。
如果指定的是json
,响应结果作为一个对象,在传递给成功处理函数之前使用jQuery.parseJSON
进行解析。 解析后的JSON对象可以通过该jqXHR
对象的responseJSON
属性获得的。
查看jQuery.parseJSON( json )的解释:
传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些无效的 JSON 字符串:
{test: 1}
(test 没有使用双引号包裹).{'test': 1}
('test' 用了单引号而不是双引号包裹).
"{test: 1}"
(test 没有使用双引号包裹)."{'test': 1}"
('test' 用了单引号而不是双引号包裹)."'test'"
('test' 用单引号代替双引号).".1"
(number 必须以数字开头;"0.1"
将是有效的)."undefined"
(undefined
不能表示一个 JSON 字符串; 然而null
,可以)."NaN"
(NaN
不能表示一个 JSON 字符串; 用Infinity
直接表示无限也是不允许的).
上面提到返回是一个字符串时会导致抛出异常,奇怪的是我调试的时候并没有抛出异常。
随机推荐
- Input输入控制
1.Input只能输入正整数 <html> <head> <title>只能输入正整数</title> </head> <body&g ...
- 关于android setTextSize() 以及 px dip/dp sp的说明。。。。
Paint.setTextSize()单位为px,Android系统中,默认的单位是像素(px).也就是说,在没有明确说明的情况下,所有的大小设置都是以像素为单位.Paint.setTextSize传 ...
- UDP丢包问题
1. 问题描述 PC-A向PC-B发送UDP packet(共16K bytes),如果B机木有及时Read,UDP包将大量丢失. 2. 原因及解决 因为B木有及时接收,socket缓冲区放不下了. ...
- BASIC-23_蓝桥杯_芯片测试
思路: 1.当测试与被测试的芯片全部可以互相测试时,为好芯片; 示例代码: #include <stdio.h>#define N 20 int main(void){ int n = 0 ...
- 我的JdbcUtils类
这是目录结构: 其中后面三个类都是第一个类的子类,第一个类是父类. JdbcUtils: package com.smt.db; import java.io.IOException; import ...
- 【Spring学习笔记-MVC-17】Spring MVC之拦截器
作者:ssslinppp 1. 拦截器简介及应用场景 2. 拦截器接口及拦截器适配器 3. 运行流程图 正常运行 中断流程 4. 程序实例 控制层: @Controller @Reques ...
- JSON: JSON 用法
ylbtech-JSON: JSON 用法 1. JSON Object creation in JavaScript返回顶部 1. <!DOCTYPE html> <html> ...
- 过度使用DBLINK做系统集成会带来的问题
过度使用DBLINK做系统集成会带来很多问题,问题主要由以下几点: 1. 大量消耗数据库资源: 本地系统每通过DBLINK链接远端系统一次,都会生成一个本地session,如本地session不退出或 ...
- 关于clearfix和clear的研究
今天领导跟我说到这个问题,我上网找了些资料,已转载一篇文章到本博客(后一篇),摘自百度文库. ps:还有一种写法就是: CSS代码: .clearfix:after { content: " ...
- 1108 Finding Average (20 分)
1108 Finding Average (20 分) The basic task is simple: given N real numbers, you are supposed to calc ...