0

我知道数据可以通过 URL 传递,例如“example.com/thing?id=1234”,或者可以通过表单和“提交”按钮传递,但这些方法都不起作用为了我。

我需要得到一个相当大的 xml 字符串/文件。我需要解析它并从中获取数据,然后才能显示我的页面。

如何在页面加载时获得此信息?客户端是否必须发送http请求?或者将 xml 作为字符串提交到隐藏表单?


使用背景信息编辑:

我正在创建一个小部件,它将出现在我客户的应用程序中,使用 C# WebBrowser 控件嵌入,但将托管在我的服务器上。Web 应用程序需要通过 xml 将一些数据(包括用于客户端验证的令牌)传递给我的小部件,并且这需要在我的小部件启动时首先加载。

4

9 回答 9

1

假设您使用的是 ASP.NET,因为您说它是由另一个页面生成的,所以只需将 XML 保持在Session状态。

于 2013-08-01T16:19:52.057 回答
1

另一种方法,不确定它是否对您的情况有帮助。

如果您在两个站点(即 .....sitename.com )上共享二级域名,那么共享数据的另一种潜在方式是您可以让他们在二级域名中声明一个 cookie,其中包含令牌和 xml 数据. 然后,您将获得此 cookie。

我这样做只是为了共享身份验证详细信息,您至少需要共享机器密钥才能支持这一点(假设这里是 .Net ......)。

于 2013-08-08T00:56:53.707 回答
1

ASP.NET MVC 4 非常适用于 jQuery 和 aJax 帖子。我利用这一点已经多次实现了这个目标。

jQuery:

        $(document).ready(function() {            
            $.ajax({
                type: "POST",
                url: "/{controller}/{action}/",
                data: { clientToken: '{token}', foo: 'bar',
                success: function (data, text) {
                        //APPEND YOUR PAGE WITH YOUR PARSED XML DATA
                        //NOTE: 'data' WILL CONTAIN YOUR RETURNED RESULT
                }
            });
        });

MVC 控制器:

    [HttpPost]
    public JsonResult jqGetXML(string clientToken, string foo)
    {
        JsonResult jqResult = new JsonResult();

        //GET YOUR XML DATA AND DO YOUR WORK
        jqResult.Data = //WHATEVER YOU WANT TO RETURN;

        return jqResult;
    }

注意: 此示例返回 Json 数据(更易于使用 IMO),而不是 XML。它还假设 XML 数据不是来自客户端,而是存储在服务器端。

编辑:这是 jQuery 的 Ajax 文档的链接, http://api.jquery.com/jQuery.ajax/

于 2013-08-12T15:32:40.483 回答
0

示例解决方案:

后台进程导入 xml 文件并解析它。后台进程知道它是给客户 YYY 的,并更新他们的信息,因此它知道 xml 文件已被处理。

访问者访问嵌入了小部件的客户 Web 应用程序。在小部件的标记中添加了客户令牌。这可能在 JavaScript、Flash、iFrame 等中。

当小部件加载时,它会向您的应用程序发出请求,然后检查该文件是否已针对提供的客户 (YYY) 进行了解析(如果有),然后显示页面/小部件。

于 2013-08-01T16:58:46.363 回答
0

您将无法自动将文件从客户端上传到服务器 - 至少不能通过使用 html/js/httprequests 的浏览器。浏览器根本不允许这样做。

想象一下,如果浏览器允许您在他们不知情的情况下从客户端本地计算机上静默上传文件,则会产生安全隐患。

于 2013-08-06T04:23:57.300 回答
0

如果 XML 是通过 HTTP 提供的,您可以使用 Liqn 来解析数据。

前任。

 public partial class Sample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = "http://news.yahoo.com/rss/";
        var el = XElement.Load(url).Elements("channel");

        StringBuilder output = new StringBuilder();

        foreach (var c in el.Elements())
        {
            switch (c.Name.LocalName.ToLower())
            {
                case "title": 
                    output.Append(c.Value);
                    output.Append("<br />");
                    break;
            }
        }

        this.Label1.Text = output.ToString();

    }
}
于 2013-08-09T15:18:29.667 回答
0

目前尚不清楚应用程序是什么,您有哪些选项,以及您对 Web 服务器有哪些控制。

如果您是 Web 服务器/应用程序的所有者,您的选择范围会更广。您可以先使用 HTTP POST 或 PUT 将文件发送到 Web 服务器,包括随机令牌,然后在查询字符串中使用带有令牌的 GET 相同的令牌

或使用其他选项,适用于第三方拥有的网站

如果您尝试使用一些 auth api,请了解更多信息。由于您正在托管 Web 浏览器控件,因此您有很多选项可以编写脚本。包括加载任何表单,使用您的 xml 设置 textarea 或隐藏字段文本,然后模拟提交按钮单击。然后,您可以响应任何重定向和 html 响应。

您还可以在页面中注入 javascript,然后通过 ajax 请求将其发送到服务器。

选择很大程度上取决于交互模型。

如果您需要更好的建议,如果您提供示例/简化的 url/url 模式、表单内容和从代码/api/sdk 角度预期的事件序列,那将是最有帮助的。他们通常很友好。

于 2013-08-10T06:14:26.600 回答
0

在页面之间传递数据的方法数量有限。为此,我个人会在生成页面期间保持会话,并在所需页面中检索到它时将其清除。如果它是在服务器端生成的,则没有理由从客户端检索它。

http://msdn.microsoft.com/en-us/library/6c3yckfw(v=vs.100).aspx

于 2013-08-12T14:51:20.103 回答
0

创建一个 Web 服务,您的 C# 应用程序可以将 XML POST 到并返回 HTML 作为响应。将此 HTML 字符串加载到 WebBrowser 控件中,而不是将控件指向 URL。

于 2013-08-12T20:32:28.367 回答