0

嗨,我正在执行以下代码,并将以下代码保存在单独的 js 文件中,并在所有其他 .aspx 文件中引用该文件。当我将以下代码直接放入 .aspx 文件脚本部分时,它可以正常工作,但是当我将它与其他函数一起保存在单独的 js 文件中时,它不能正常工作

功能页面加载(发件人,参数){

  var dict = $.parseJSON('<%=DictJson %>');
var data = eval(dict);

}

我在 var dict = $.parseJSON('<%=DictJson %>'); 处遇到错误。显示的错误是 Microsoft JScript 运行时错误:抛出异常但未捕获,它显示 json 文件中的抛出 } if (!v("json-parse")) { var M = String.fromCharCode, N = { 92: "\", 34: '"', 47: "/", 98: "\u0008", 116: "\t", 110: "\n", 102: "\u000c", 114: "\r" }, b, A, j = function () { b = A = w; throw SyntaxError(); }, q = function () { for (var a = A, f = a.length, c, d, h, k, e; b < f; ) { e = a.charCodeAt(b); switch (e) { case 9: case 10: case 13: case 32: b++;

我写的 DictJson 是一个解析过的字典,我在后端解析它的其他一些基本页面,每个页面都可以访问它。解析代码是

    public string DictJson
    {
        get
        {

            MouseOverFieldDict mdict = (MouseOverFieldDict)(HttpContext.Current.Session["MouseOverFieldDict"]);
            JavaScriptSerializer jSer = new JavaScriptSerializer();
            return jSer.Serialize(mdict.FieldDict);

        }
    }

请帮我解决错误。我不明白为什么它会在脚本中抛出该错误

4

2 回答 2

1

如果 DictJson 是代码隐藏中的可访问成员(属性/字段),则仅在 .aspx 文件中评估服务器端表达式“<%=DictJson %>”。对 JavaScript 文件的请求是一个完全独立的请求,因此它不知道 DictJson。

你仍然可以在你的 JavaScript 中使用你的函数,但我建议这样:

JavaScript 文件:

function myPageLoad(DictJson) {
  var dict = $.parseJSON(DictJson);
  var data = eval(dict);
}

后面的代码(粗略地说,我不是为 c# 设置的):

void Page_PreRender(object sender, EventArgs args) {
  string scriptName;
  string scriptText;

  // have jQuery to call the function in your JS with the serialized Dict
  scriptText = "$(function(){myPageLoad('" + DictJson + "');});";
  scriptName = "onLoadScript";

  ClientScriptManager.RegisterStartupScript(Me.GetType(), scriptName, scriptText, True);
}

RegisterStartupScript 文档:http: //msdn.microsoft.com/en-us/library/z9h4dk8y.aspx

于 2013-10-17T16:22:38.007 回答
0

如果我没记错的话,问题是当您将 javascript 移动到其自己的单独文件中时,javascript 不知道如何本地处理“gator”标签 (<%=...%>)。您要么需要将脚本内联在您的 aspx 页面中,要么需要提出一种机制,以便在您进行函数调用时将 DictJson 的值传递给您的函数调用。

于 2013-10-17T15:48:29.470 回答