• 提交数据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(/definedbys*=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 );

    解决问题的思路因为觉得太复杂[的确是复杂],而不知道怎么入手。要改变方法。耗的时间太久了。

  • 相关阅读:
    nginx 配置 开发
    导入excel 数据到mysql出现的时间格式
    gradle 集成到myeclipse
    多线程同步和异步的方式
    谈一下spring 的理解
    java 中的反射
    Sublime Text 下配置python
    Python元组的简单介绍
    Python中strip()函数
    Python中的repr()函数
  • 原文地址:https://www.cnblogs.com/forhell/p/4924782.html
Copyright © 2020-2023  润新知