从服务器动态生成Javascript代码 - MVC 4

时间:2015-02-02 09:45:29

标签: javascript asp.net-mvc-4 jsonp asp.net-web-api

我正在使用MVC 4 Web Api,我需要公开一个终点,客户可以使用该终点在其网页上呈现代码。像这样的东西

<script type="text/javascript" src="http://server/endpoint"/>

当网页中包含上述行时,服务器应返回应自动执行的javascript代码。

例如,如果服务器返回代码 - alert('hello'),则客户端网页(使用脚本)应自动弹出“hello”。

服务器端代码如下所示。在这种情况下,服务器返回javacript代码以在浏览器中写入表。基本上,这用于返回大学特定教授的出版物清单。暴露了这一点,以便个人可以在其网页中包含脚本以显示他们的出版物

// GET api/values/5
        public string Get(int id)
        {

            var html = "<table><tbody>";
            html += "<tr>";
            html += "<td>row 1, col 1</td>";
            html += "<td>row 1, col 2</td>";
            html += "</tr>";
            html += "<tr>";
            html += "<td>row 2, col 1</td>";
            html += "<td>row 2, col 2</td>";
            html += "</tr>";
            html += "</tbody></table>";
            var script = string.Format(@"<script type='text/javascript'>document.write('{0}')</script>", html);
            return script;
        }

有任何想法如何实现这一目标。我尝试使用Response.Write("alert('hello')"),但它不起作用。

2 个答案:

答案 0 :(得分:0)

1 - 如果您将在脚本标记中使用端点,则无需在de get方法中重写脚本标记。

2 - 您尝试返回的代码不是javascript代码,这是一个html代码,在调用时不会运行,而是脚本标记。

3 - 尝试这样做:

HTML:

<script type="text/javascript" src="http://server/endpoint"/>

的WebAPI:

public string Get(int id)
{
    return "alert('hello world');";
}

答案 1 :(得分:0)

我正在使用带有REST端点的WCF服务,并且我的脚本也被视为字符串,因为它是在双引号之间引用的。

"alert('hello world');"代替alert('hello world');

我在这里找到了解决方案: https://viswaug.wordpress.com/2008/05/22/customizing-the-response-serialization-in-wcf-rest-services/

您必须将响应的内容类型设置为application/x-javascript并将您的字符串包装在MemoryStream中,如下所示:

public Stream GetSomeScript()
{
    WebOperationContext context = WebOperationContext.Current;
    context.OutgoingResponse.ContentType = "application/x-javascript";

    const string TEXT_TO_SEND = "alert('hello world');";

    MemoryStream ms = new MemoryStream();
    StreamWriter sw = new StreamWriter(ms);
    sw.Write(TEXT_TO_SEND);
    sw.Flush();
    ms.Position = 0;
    return ms;
}

希望这有帮助。