【问题标题】:how to pass json in a querystring?如何在查询字符串中传递 json?
【发布时间】:2013-02-21 09:31:47
【问题描述】:

我正在尝试通过使用 Jquery.param 将 JSON 编码到 URI 中来将 JSON 发送到服务器,但出现以下错误。

window.location.href = BriefExportPath+$.param(JSON.stringify({
                        title: $('.ui-dialog-title').text(),
                        items: ko.utils.arrayMap(Neptune.BriefCountrySection.SelectedCountries(), function (item) {
                            return item.ItemName
                        })
                    }))



[CustomAuthorize(Definitions.RoleSonarAdmin)]
        public FileContentResult ExportCsv(string json)
        {
            var x = new System.Web.Script.Serialization.JavaScriptSerializer();
            object obj = x.DeserializeObject(json);
            //return File(Helpers.BriefCsvBytes.GetCsvBytes(items), "text/csv", title); 
            return null;
        }



http://dev.neptune.local/Briefs/ExportCsv?0=%7B&1=%22&2=t&3=i&4=t&5=l&6=e&7=%22&8=%3A&9=%22&10=B&11=r&12=i&13=e&14=f&15=+&16=C&17=o&18=u&19=n&20=t&21=r&22=y&23=+&24=L&25=i&26=s&27=t&28=%22&29=%2C&30=%22&31=i&32=t&33=e&34=m&35=s&36=%22&37=%3A&38=%5B&39=%22&40=A&41=f&42=r&43=i&44=c&45=a&46=%22&47=%2C&48=%22&49=A&50=m&51=e&52=r&53=i&54=c&55=a&56=s&57=%22&58=%2C&59=%22&60=A&61=s&62=i&63=a&64=%22&65=%2C&66=%22&67=E&68=u&69=r&70=o&71=p&72=e&73=%22&74=%5D&75=%7D

【问题讨论】:

  • 你在使用 - JSON.stringify(data) - 在将它添加到查询字符串之前?
  • 是的,请查看更新。
  • 你试过使用HttpUtility.UrlDecode()
  • 重要的行肯定在 579 之前。json 变量在哪里分配?
  • 您的查询字符串参数名称似乎错误。从那个屏幕截图看起来它是'0'

标签: c# javascript jquery asp.net


【解决方案1】:

来自jQuery.param()的手册:

创建数组或对象的序列化表示,适用于 URL 查询字符串或 Ajax 请求。

您正在向它传递JSON.stringify 的返回值,它是一个字符串

你需要给它传递一个对象。:

var json = JSON.stringify(etc etc);
var url = BriefExportPath + $.param( { "json": json } );
location = url;

然后,您的服务器端代码将需要从 json 查询键中提取数据。

【讨论】:

  • 我也使用了'var oo = xx.Deserialize(json);'而不是“DeserializeObject()”,所以我不必处理代码中的数组。只需确保您的 json 属性名称与您的对象名称匹配。我不必列出所有属性,只需列出我想要填写的属性即可。
【解决方案2】:

为什么你不使用这个

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

而不是查询字符串。

【讨论】:

  • 因为我从服务器返回了一个文件
  • 在这种情况下,为什么不更改 contentType 以匹配您返回的文件类型?
  • @TimothyGroote — 如果文件是通过.ajax 请求的,这将有什么帮助?是什么让您认为服务器端代码发出了错误的内容类型?
  • $.ajax 不同之处仅在于它通过异步过程检索信息。即使使用$.ajax,您也可以请求文件下载。
  • 另外,在发表评论时,我没有表明服务器将返回什么样的文件
【解决方案3】:

您的服务器希望输入以某个可预测的变量名称结尾,但您似乎尝试将其放入名为 0 的 GET 变量中,正如我们在 ExportCsv?0= 中看到的那样

您的代码所期望的是ExportCsv?json=

确保将值传递给正确的 GET 变量名

【讨论】:

  • 自动赋值为0。
  • 那么我们至少可以看到应该捕获您的 GET 变量值的代码吗?
【解决方案4】:
var jObj = (JObject)JsonConvert.DeserializeObject(json);

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多