【问题标题】:Dynamically Generate Javascript Code from Server - MVC 4从服务器动态生成 Javascript 代码 - MVC 4
【发布时间】:2015-04-01 05:28:17
【问题描述】:

我正在使用 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')"),但它不起作用。

【问题讨论】:

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


【解决方案1】:

我正在使用带有 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;
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    3 - 尝试这样做:

    html:

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

    网络API:

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

    【讨论】:

    • 它对你有用吗?我的终点是-localhost:49209。当请求到达端点时,我有一个 ajax get - $.get('/api/values/5') 它返回字符串 - “alert('hello')”;。这被视为 html 字符串,而不是作为 javascript 代码执行。我做错了什么?
    • 你试过像我的例子一样吗?在我的示例中,我没有使用 ajax 调用,而是使用脚本标签 src 中的端点。就像你在问题中问的那样。
    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2015-04-04
    • 2017-02-24
    • 2013-07-20
    相关资源
    最近更新 更多