提交数据url太长导致提交失败
使用了dojo开发。在datagrid过滤的时候。为了让过滤好处理,直接设置为完全二叉树的方式来存查询条件。但是在提交数据的时候,默认是get?url的方式。结果导致条件选择一两个,url会特别长。然后会报404错误。差点把前面的设计推掉,重来。项目就差一小部分了。时间上也来不及了。硬着头皮,看了一天的js源代码,我只能说,俺对js的世界无法理解啊。反复的试验了好久,硬是将rest的get请求,改为了post请求。代码如下:
1 require(["dojo/_base/declare", "dojox/rpc/JsonRest", "dojox/data/JsonRestStore", "dojo/dom", "dojo/domReady!"], 2 function (declare, rpcJsonRest,JsonRestStore, locale, dom) { 3 return declare("mydata.JsonRestStore", [dojox.data.JsonRestStore], {//我的rest并不标准{Data:data,ErrorNo:1,ErrorInfo:errorinfo}这种形式。 4 _processResults: function (results, deferred) { 5 // index the results 6 if (results.ErrorNo > 0) { 7 alert(results.ErrorInfo); 8 throw new Error(results.ErrorInfo || ''); 9 } 10 var count = results.Data.TotalRowCount; 11 results = results.Data.Items; 12 // 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 13 return { totalCount: deferred.fullLength || (deferred.request.count == count ? (deferred.request.start || 0) + count * 2 : count), items: results }; 14 }, 15 _doQuery: function (args) {//重写了一个_doQuery 16 var query = typeof args.queryStr == 'string' ? args.queryStr : args.query; 17 //var myservice = this.service({}, args); 18 var myservice = this.service._getRequest({ operation: query.operation }, args)//从这里开始新的调用。 19 var xhrArgs = { 20 url: myservice.url, 21 handleAs: "json", 22 headers: { 23 Accept: "application/json,application/javascript", 24 Range: myservice.headers.Range 25 }, 26 content: { filtercodtion: query.filtercodtion } 27 }; 28 var deferred = dojo.xhrPost(xhrArgs); //rpcJsonRest.query(this.service, query, args);原来的调用。 29 var self = this; 30 if (this.loadReferencedSchema) { 31 deferred.addCallback(function (result) { 32 var contentType = deferred.ioArgs && deferred.ioArgs.xhr && deferred.ioArgs.xhr.getResponseHeader("Content-Type"); 33 var schemaRef = contentType && contentType.match(/definedby\s*=\s*([^;]*)/); 34 if (contentType && !schemaRef) { 35 schemaRef = deferred.ioArgs.xhr.getResponseHeader("Link"); 36 schemaRef = schemaRef && schemaRef.match(/<([^>]*)>;\s*rel="?definedby"?/); 37 } 38 schemaRef = schemaRef && schemaRef[1]; 39 if (schemaRef) { 40 var serviceAndId = rpcJsonRest.getServiceAndId((self.target + schemaRef).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/, "$2$3")); 41 var schemaDeferred = rpcJsonRest.byId(serviceAndId.service, serviceAndId.id); 42 schemaDeferred.addCallbacks(function (newSchema) { 43 lang.mixin(self.schema, newSchema); 44 return result; 45 }, function (error) { 46 alert(error); 47 console.error(error); // log it, but don't let it cause the main request to fail 48 return result; 49 }); 50 return schemaDeferred; 51 } 52 return undefined;//don't change anything, and deal with the stupid post-commit lint complaints 53 }); 54 } 55 return deferred; 56 } 57 }); 58 } 59 );
解决问题的思路因为觉得太复杂[的确是复杂],而不知道怎么入手。要改变方法。耗的时间太久了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构