如何在加载时从客户端获取数据

本文关键字:客户端 获取 数据 加载 | 更新日期: 2023-09-27 18:25:47

我知道数据可以通过URL传递,比如"example.com/thing?id=1234",也可以通过表单和"提交"按钮传递,但这两种方法都不适用。

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

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


编辑背景信息:

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

如何在加载时从客户端获取数据

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数据不是来自客户端,而是存储在服务器端。

EDIT:这里有一个指向jQuery Ajax文档的链接,http://api.jquery.com/jQuery.ajax/

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

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

如果你在你的两个网站上共享第二级域名(即……sitename.com),那么另一种共享数据的潜在方式是让他们在第二级断言一个cookie,其中包含令牌和xml数据。然后你会得到这个cookie。

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

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

想象一下,如果浏览器允许您在不知情的情况下从客户端本地机器静默地上传文件,会带来什么安全隐患。

样品溶液:

后台进程导入xml文件并对其进行解析。后台进程知道它是为客户YYY准备的,并更新他们的信息,以便知道xml文件已被处理。

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

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

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

Ex。

 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();
    }
}

目前还不清楚应用程序是什么,您有什么样的选项,以及您对web服务器的控制是什么。

如果你是网络服务器/应用程序的所有者,你的选择范围会更广。您可以首先使用HTTPPOST或PUT将文件发送到web服务器,其中包括一个随机令牌,然后使用查询字符串中的令牌对GET使用相同的令牌

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

如果你试图使用一些authapi,请了解更多信息。由于你是web浏览器控件的宿主,你有很多选项来编写它。包括加载任何表单,用xml设置文本区域或隐藏字段文本,然后模拟提交按钮点击。然后,您可以响应任何重定向和html响应。

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

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

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

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

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

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