提交数据url太长导致提交失败
使用了dojo开发。在datagrid过滤的时候。为了让过滤好处理,直接设置为完全二叉树的方式来存查询条件。但是在提交数据的时候,默认是get?url的方式。结果导致条件选择一两个,url会特别长。然后会报404错误。差点把前面的设计推掉,重来。项目就差一小部分了。时间上也来不及了。硬着头皮,看了一天的js源代码,我只能说,俺对js的世界无法理解啊。反复的试验了好久,硬是将rest的get请求,改为了post请求。代码如下:
require(["dojo/_base/declare", "dojox/rpc/JsonRest", "dojox/data/JsonRestStore", "dojo/dom", "dojo/domReady!"],
function (declare, rpcJsonRest,JsonRestStore, locale, dom) {
return declare("mydata.JsonRestStore", [dojox.data.JsonRestStore], {//我的rest并不标准{Data:data,ErrorNo:1,ErrorInfo:errorinfo}这种形式。
_processResults: function (results, deferred) {
// index the results
if (results.ErrorNo > ) {
alert(results.ErrorInfo);
throw new Error(results.ErrorInfo || '');
}
var count = results.Data.TotalRowCount;
results = results.Data.Items;
// if we don't know the length, and it is partial result, we will guess that it is twice as big, that will work for most widgets
return { totalCount: deferred.fullLength || (deferred.request.count == count ? (deferred.request.start || ) + count * : count), items: results };
},
_doQuery: function (args) {//重写了一个_doQuery
var query = typeof args.queryStr == 'string' ? args.queryStr : args.query;
//var myservice = this.service({}, args);
var myservice = this.service._getRequest({ operation: query.operation }, args)//从这里开始新的调用。
var xhrArgs = {
url: myservice.url,
handleAs: "json",
headers: {
Accept: "application/json,application/javascript",
Range: myservice.headers.Range
},
content: { filtercodtion: query.filtercodtion }
};
var deferred = dojo.xhrPost(xhrArgs); //rpcJsonRest.query(this.service, query, args);原来的调用。
var self = this;
if (this.loadReferencedSchema) {
deferred.addCallback(function (result) {
var contentType = deferred.ioArgs && deferred.ioArgs.xhr && deferred.ioArgs.xhr.getResponseHeader("Content-Type");
var schemaRef = contentType && contentType.match(/definedby\s*=\s*([^;]*)/);
if (contentType && !schemaRef) {
schemaRef = deferred.ioArgs.xhr.getResponseHeader("Link");
schemaRef = schemaRef && schemaRef.match(/<([^>]*)>;\s*rel="?definedby"?/);
}
schemaRef = schemaRef && schemaRef[];
if (schemaRef) {
var serviceAndId = rpcJsonRest.getServiceAndId((self.target + schemaRef).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/, "$2$3"));
var schemaDeferred = rpcJsonRest.byId(serviceAndId.service, serviceAndId.id);
schemaDeferred.addCallbacks(function (newSchema) {
lang.mixin(self.schema, newSchema);
return result;
}, function (error) {
alert(error);
console.error(error); // log it, but don't let it cause the main request to fail
return result;
});
return schemaDeferred;
}
return undefined;//don't change anything, and deal with the stupid post-commit lint complaints
});
}
return deferred;
}
});
}
);
解决问题的思路因为觉得太复杂[的确是复杂],而不知道怎么入手。要改变方法。耗的时间太久了。
提交数据url太长导致提交失败的更多相关文章
- uniapp在在页面跳转时,若URL太长的字符串会导致数据传递失败
url有长度限制,太长的字符串会传递失败,可使用窗体通信.全局变量,或encodeURIComponent等多种方式解决,如下为encodeURIComponent示例的解决方法. <navig ...
- django 使用form组件提交数据之form表单提交
django的form组件可以减少后台在进行一些重复性的验证工作,极大降低开发效率. 最近遇到一个问题: 当使用form表单提交数据后,如果数据格式不符合后台定义的规则,需要重新在前端页面填写数据. ...
- css自动换行如何设置?url太长会撑开页面
我们更新文章时如果有引用其他文章一般会带一个原文url,但这个链接如果太长的话会把内容的版块撑开,整个排版乱了.那我们能不能设置css自动换行呢?如下图所示,其实只要两个样式就能搞定 word-wra ...
- Java Mail 附件名太长导致接收端附件名解析出错
问题前提:公司需要往邮件中写 excle 文件,返送成功后发现文件格式有误(如:xxxx.bat 等文件后缀),但是有些文件又不会, 后来发现是由于文件名称太长所导致. 问题原因:java mail中 ...
- 解决window.location.href参数太长 post提交数据
前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...
- CastleActiveRecord在多线程 事务提交时数据库资源竞争导致更新失败的测试结果记录
CastleActiveRecord 经过测试,隔离级别: // 摘要: , , , , , , , ...
- git因commit的记录太大导致push失败解决方法
发现好像这个方法不好使.......~~!还是会失败 如果有人或者自己失误把不该同步的大文件如数据或日志或其他中间文件给commit了并且push了,然后你删掉了,但是其实他仍然在你的git记录中,你 ...
- 用Ajax调用web api,解决URL太长的问题;
本来是用的WCF,但是服务需要多种方式调用(后台+前端Ajax),最终局面就是我在WCF每个服务中都判断一下↓ #region 解决接收不到Ajax中传来的参数... if (jsonParames ...
- html Js跨域提交数据方法,跨域提交数据后台获取不到数据
MVC实现方式:(后台获取不到方法请参考下面js) [ActionAllowOrigin][HttpPost]public JsonResult Cooperation() { return json ...
随机推荐
- mysql数据库史上最详细起步教程(1)
本文主要讲解mysql的操作,尽量保证步骤的详细与清晰,希望能帮到大家. 1.登录后进行数据库的创建:create database lf(数据库名); (一定要记住分号,mysql在语句的结束符就 ...
- fastcgi与cgi的区别
fastcgi与cgi的区别 先讲下cgi:cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fo ...
- kali python pip3 的安装和卸载
今天很高兴安装完成调整了kali 然后看见kali已经帮助我安装了python2.7和python3.5可把我开心坏了,可是2.7有pip,而且包很全,但2.7与3.0切换使用我的就尴尬了 最后在su ...
- Ubuntu16.04安装Screenlets
通过添加软件源的方式安装装 sudo add-apt-repository ppa:screenlets/ppa sudo apt-get update sudo apt-get install sc ...
- Win10搭建Linux开发环境之网络连接设定
一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...
- shell语法
基本语法列表 #linux组成:内核+工具 #linux启动: . getty:提示登录名和密码,输入之后调用login . login:login验证用户名和密码,然后调用shell . shell ...
- [MySQL]MySQL之权限管理
一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执行update操作.只允许你从某台机器上连接m ...
- 使用vue1.0+es6+vue-cli+webpack+iview-ui+jQuery 撸一套高质量的后台管理系统
首先按照vue.js官网的指令安装: 1.本地安装好node.js 2.根据官方命令行工具 详情 这样一个官方的脚手架工具就已经搭建好了:但是有一点需要注意的是由于现在按照官方的搭建方法是搭建vue2 ...
- ant 使用指南
一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 开发环境: System:Windo ...
- JavaScript 操作 Cookie
转自作者:聂微东出处:http://www.cnblogs.com/Darren_code/ 什么是 Cookie “cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器 ...