【发布时间】:2013-12-10 15:55:07
【问题描述】:
我正在尝试从静态方法运行一个简单的警报脚本(打算将来运行函数),但它没有向我显示警报(如果我在页面加载事件中这样做,它工作正常):
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
string myScript = "<script type=\"text/javascript\" language=\"Javascript\">";
myScript += "alert('hi');";
myScript += "</script>";
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", myScript);
}
如果我调试ClientScript 确实运行,有人可以帮忙吗?
编辑
这是我想在success event of ajax webmethod 之后运行的示例脚本:
<script type="text/javascript">
var OrderReference = '<%= Id %>';
var EID = <%= EId %>;
var Comment = '';
var SubDomain = 'track';
if (location.protocol.toLowerCase() == 'https:')
wgProtocol = 'https';
else
wgProtocol = 'http';
Uri = wgProtocol + '://' + SubDomain + '.test.com/tr.html' + '?&eid=' + EID
+ '&orderreference=' + OrderReference ;
document.write('<sc' + 'ript language="JavaScript" type="text/javascript" src="' + Uri + '"></sc' + 'ript>');
</script>
<noscript>
<img src='http://test.com/transaction.html?ver=1&eventid=<%= EId %>&wgorderreference=<%= Id %>&' alt='' />
</noscript>
已经尝试将上述脚本作为字符串返回,并且在 ajax 方法中尝试了以下但在 Firebug 中得到 400 bad request:
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = result;
document.body.appendChild(script);
编辑 2:
我创建了这个类:
[Serializable]
public class PixelGenericResults
{
public int Id{ get; set; }
public string Script { get; set; }
}
在我的静态方法中我这样做:
var g = new GenericResults();
g.Id = 2;
g.Script = AffiliateTracking.getScript(g.Id); //This gets me the above script
HttpContext.Current.Response.ContentType = "application/json";
strReturn = new JavaScriptSerializer().Serialize(g);
我在 aspx 页面上成功了:
success: function (result) {
if (result.hasOwnProperty("d")) { result = result.d; }
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = result.Script;
document.getElementsByTagName('body')[0].appendChild(script);
}
但在运行它时,我在 firebug "NetworkError: 404 Not Found - http://localhost:5822/undefined" 中收到此错误
【问题讨论】:
-
方法是如何调用的?它叫什么?
-
我正在使用 ajax 调用静态 [WebMethod] 并且调用上述方法..
-
@Zaki 这就是重点:使用 AJAX 您不能直接在服务器端与客户端页面交互,您必须向 AJAX 调用返回一些值,然后通过 JS 在客户端执行创建警报
-
@LittleSweetSeas 我可以像你描述的那样创建简单的警报..但是想象一下,如果我有一个大脚本,那么 document.write 和成功的 ajax webmethod 想要注册它......跨度>
-
A [WebMethod] 对已经呈现的页面没有任何影响。它也不会导致呈现新页面。它所能做的就是将信息传回给客户端,客户端可以更新页面。
标签: javascript asp.net ajax c#-4.0 webmethod