代码之家  ›  专栏  ›  技术社区  ›  Rei Miyasaka

在HTML中嵌入原始数据以在jquery中分析

  •  7
  • Rei Miyasaka  · 技术社区  · 14 年前

    我的大部分职业生涯都生活在桌面世界,所以请原谅我问了这么一个基本的问题,但我不太确定从哪里开始寻找。

    我想返回一些原始数据和HTML,并在HTML就绪后使用jquery解析和显示数据。我大致知道我的JS代码应该是什么样子,但我不确定应该如何将原始数据嵌入到HTML中。

    我可以使用$.getjson(),但是如果我的HTML中有正确的数据就更好了。

    我认为JSON或XML都可以工作,但是当它们嵌入到HTML中时,如何正确地转义/嵌入/解析它们呢?

    事先谢谢。

    3 回复  |  直到 14 年前
        1
  •  7
  •   cnanney    14 年前

    您可以将JSON数据放入隐藏的DIV中,然后从jquery中解码和使用。

    例如,我们将采取:

    {"foo":"apple","bar":"orange"}
    

    逃出去,进入一个分区:

    <div id="data">%7B%22foo%22%3A%22apple%22%2C%22bar%22%3A%22orange%22%7D</div>
    

    然后通过jquery,我们可以使用以下数据:

    var data = jQuery.parseJSON(unescape($("#data").html()));
    

    如此呼唤 alert(data.foo) 会给我们 apple .

    Here's a working example.

        2
  •  5
  •   Omar    14 年前

    您希望在何时何地使用此数据?

    如果您想要它在您的视图中,只需将数据传递给视图

    动作/控制器:

    public ActionResult MyAction()
    {
        ViewData["MyData"] = "this is a sample data of type string";
        return View();
    }
    

    然后,在你看来的某个地方:

    <script>
        var data = '<%= ViewData["MyData"] %>';
        $(document).ready(){
            alert(data);
        }
    </script>
    <h1><%: ViewData["MyData"] %></h1>
    

    当然,如果你和一个 List<string> 或者“string[]”,您需要将其格式化为适当的javascript,以便jquery能够理解它。

    <script>
         var dataArray = [
    
         <% foreach(string s in (string[])ViewData["MyDataArray"]){ %>
            <%= s %>,
         <% } %>   
         ];
    </script>
    

    如果您在操作中而不是视图中生成了适当的javascript以避免视图中出现难看的标记,那么这将是一个很好的方法:

    public ActionResult MyAction()
    {
        string[] myArray = new string[]{ "hello", "wolrd" };
        ViewData["MyData"] = myArray;
        ViewData["JavaScriptArray"] = "[" + myArray.Aggregate((current,next) => string.Format("'{0}','{1}',", current, next).TrimEnd(new char[] { ','})) + "]";
        // or you can use your favorite JavaScript serialize
        return View();
    }
    

    现在,您可以在视图中执行以下操作:

    <script>
        var dataArray = <%= ViewData["MyJavaScriptArray"] %>;
        alert(dataArray[0]); // alerts 'hello'
    </script>
    
        3
  •  1
  •   Sruly    14 年前

    如您所说,最好是使用$.post或$.get或$(element.load()等通过Ajax获得它…

    但是,如果必须将其保存在页面中,则通常将其保存在隐藏字段中。ASP.NET使用二进制序列化和base64将内容保存在隐藏字段中,但可以将其保存为JSON字符串,然后在JS中使用。