4

我在 javacript 中创建了一个包含大量数据的对象,并将其序列化为 JSON 以将其发送到服务器。在此之后,服务器必须做一些工作并创建一个动态文件,以便可以下载。对于最后一个例程,我创建了一个 ASHX,但可以修改。我已经得到了一个“httpcontext”,我在另一个问题中找到了如何使用它来从 JSON 中获取数据,所以我的问题与此无关。

问题(更面向 JS)是这个:

如何将 JSON 作为 URL/GET/POST 发送到 ASHX 到通用处理程序以避免“ajax 回复”并让用户打开一个带有动态生成链接的新窗口?

谢谢,对不起我的英语(请编辑)和亲切的问候!

注 1:我不能使用第三方代码
注 2:我不能使用 JSON.NET
注 3:我不能将报告保存在服务器上,所以响应必须是生成的文件才能下载,甚至更多,下载本身是服务器的响应。

- -更新 - -

我读过这个问题: 我可以在不使用 AJAX 的情况下发布 JSON 吗?

我从那个问题中唯一不明白的是如何使它工作,认为我有一个“链接”可以下载

4

2 回答 2

2

我假设您不想刷新整个页面,所以有一个解决方法。

1) Ajax 加载一个 iframe,例如,它是一个单独的 aspx 文件。

2) 在该单独的 aspx 文件的代码隐藏中,在内存中生成文件并将其转换为字节数组。

3)然后使用 Response 将字节流式传输给用户。

于 2013-10-10T14:40:38.850 回答
0

最后我解决了这个问题(以正确的方式)。

我只是拿我的 json 对象并通过 POST 发送它,并使用 javfascript 生成的动态表单

var dataToPostInExport = JSON.stringify(queryToVerify);
//Convert To POST and send  
var VerifyForm = document.createElement("form");
VerifyForm.target = "_blank";
VerifyForm.method = "POST";
VerifyForm.action = "file.ashx";
var dataInput = document.createElement("input");
dataInput.type = "hidden";
dataInput.name = "mydata";
dataInput.value = dataToPostInExport;
VerifyForm.appendChild(dataInput);
document.body.appendChild(VerifyForm);
VerifyForm.submit();

然后在 ashx 文件中:

            Dim DataToParse As String
            DataToParse = HttpContext.Current.Request.Form("mydata")
            Dim JSSerializer As New JavaScriptSerializer
            Dim QueryToExport as my very own type!
            QueryToExport = JSSerializer.Deserialize(Of My Own Type)(dataToParse)
于 2013-10-29T15:00:45.993 回答