从服务器动态生成 Javascript 代码 - MVC 4
Dynamically Generate Javascript Code from Server - MVC 4
我正在使用 MVC 4 Web Api,我需要公开一个端点,客户端可以使用该端点在其网页上呈现代码。像这样
<script type="text/javascript" src="http://server/endpoint"/>
当网页中包含上述行时,服务器应该return一个应该自动执行的javascript代码。
例如,如果服务器 return 的代码 - alert('hello')
,那么客户端网页(使用脚本)应该会自动弹出 "hello"。
服务器端代码可以像下面这样。在这种情况下,服务器return的javacript代码在浏览器中写了一个table。基本上这用于 return 大学特定教授的出版物列表。公开 enpoint 以便个人可以在他们的网页中包含该脚本以显示他们的出版物
// 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')")
但它不起作用。
1 - 如果您将在脚本标记中使用端点,则无需在 de get 方法中重写脚本标记。
2 - 您尝试 return 的代码不是 javascript 代码,这是 html 代码,调用时不会 运行 而是脚本标签。
3 - 尝试这样做:
html:
<script type="text/javascript" src="http://server/endpoint"/>
webAPI:
public string Get(int id)
{
return "alert('hello world');";
}
我正在使用带有 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;
}
希望对您有所帮助。
我正在使用 MVC 4 Web Api,我需要公开一个端点,客户端可以使用该端点在其网页上呈现代码。像这样
<script type="text/javascript" src="http://server/endpoint"/>
当网页中包含上述行时,服务器应该return一个应该自动执行的javascript代码。
例如,如果服务器 return 的代码 - alert('hello')
,那么客户端网页(使用脚本)应该会自动弹出 "hello"。
服务器端代码可以像下面这样。在这种情况下,服务器return的javacript代码在浏览器中写了一个table。基本上这用于 return 大学特定教授的出版物列表。公开 enpoint 以便个人可以在他们的网页中包含该脚本以显示他们的出版物
// 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')")
但它不起作用。
1 - 如果您将在脚本标记中使用端点,则无需在 de get 方法中重写脚本标记。
2 - 您尝试 return 的代码不是 javascript 代码,这是 html 代码,调用时不会 运行 而是脚本标签。
3 - 尝试这样做:
html:
<script type="text/javascript" src="http://server/endpoint"/>
webAPI:
public string Get(int id)
{
return "alert('hello world');";
}
我正在使用带有 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;
}
希望对您有所帮助。