【问题标题】:Urlencode deep in dartUrlencode深入飞镖
【发布时间】:2014-02-12 20:03:58
【问题描述】:

我有类似的问题,例如Urlencoding in Dart。我可以通过 HttpRequest.postFormData 对 Map 进行编码。但是JQuery post方法可以编码Map<String, dynamic>.JQuery例子:

$.post("controller", 
{actualTime: 1357089552, events: [{priceInsert: 1.32128, priceExecution: 1.32128}]},
function(data) {/*handle*/});

Firebug HttpRequest 帖子视图:

actualTime                  1357089552
events[0][priceExecution]   1.32128
events[0][priceInsert]      1.32128

有效载荷来源是:

actualTime=1357089552&events%5B0%5D%5BpriceInsert%5D=1.32128&events%5B0%5D%5BpriceExecution%5D=1.32128

Dart 不能轻易做到。有人解决了这个问题吗?

带有 nette 的 PHP 需要设置一些标头:

X-Requested-With:XMLHttpRequest
Content-Type:application/x-www-form-urlencoded; charset=UTF-8

【问题讨论】:

  • 对我来说,不清楚你想做什么。
  • 我试图澄清这个问题。
  • 对不起,和以前一样不清楚。此文本`我可以通过 HttpRequest.postFormData 对 Map 进行编码。但是 JQuery post 方法可以编码 Map` 对我来说根本没有意义。如果您可以通过 HttpRequest.postFormData 对 Map 进行编码,那么 什么不起作用
  • PostFormData 需要 Map。我不能使用类似 json 的对象作为数据参数。 Map 或 Map 抛出错误。
  • 那么Map<String, dynamic> (相当于Map AFAIK)

标签: list map dart httprequest urlencode


【解决方案1】:

我有一些肮脏的快速修复。不完整,未测试,为我工作:

Map<String, dynamic> data = {"actualTime": 1357089552, "events": [{"priceInsert": 1.32128, "priceExecution": 1.32128}]};
StringBuffer urlData = new StringBuffer("");
bool first = true;
void urlEncode(dynamic sub, String path){
    if(sub is List){
      for(int i = 0;i<sub.length;i++){
        urlEncode(sub[i], "$path%5B$i%5D");
      }
    }else if(sub is Map){
      sub.forEach((k,v){
        if(path == ""){
          urlEncode(v, "${Uri.encodeQueryComponent(k)}");
        }else{
          urlEncode(v, "$path%5B${Uri.encodeQueryComponent(k)}%5D");
        }
      });
    }else{
      if(!first){
        urlData.write("&");
      }
      first = false;
      urlData.write("$path=${Uri.encodeQueryComponent(sub.toString())}");
    }
}
urlEncode(data, "");

HttpRequest xhr = new HttpRequest();
  xhr
    ..open('POST', url)
    ..onLoadEnd.listen((ProgressEvent event){/*handle success*/}, onError: (){/*handle error*/})
    ..setRequestHeader("X-Requested-With", "XMLHttpRequest")
    ..setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
    ..send(urlData.toString());

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2015-07-18
    相关资源
    最近更新 更多