从asmx调用javascript函数
本文关键字:函数 javascript 调用 asmx | 更新日期: 2023-09-27 18:25:16
我想从asmx返回javascript函数,如下所示。。
所有html标记都返回,但checkNewMsg变体'script-tag'不返回!到底发生了什么?
请告知
<script type="text/javascript">
function getWindow(FromUserID, UserID, PerID, UserName) {
$.ajax({
type: "POST",
url: "TestMessageService.asmx/OpenWindow",
data: "{'FromUserID': '" + FromUserID + "', 'ClickedUserID': '" + UserID + "', 'ClickedPerID': '" + PerID + "', 'ClickedUserName': '" + UserName + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var msgs = response.d;
$('#div_Panel').append(msgs).fadeIn("slow");
var elements = $('.panelContent');
for (var i = 0; i < elements.length; i++) {
elements[i].scrollTop = elements[i].scrollHeight;
}
},
failure: function (msg) {
$('#div_Panel').text(msg);
}
});
}
</script>
[WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public string OpenWindow(string FromUserID, string ClickedUserID, string ClickedPerID, string ClickedUserName)
{
string checkNewMsg = "<script type='"text/javascript'">window.setInterval(fc_" + ClickedUserName.Replace(" ", "") + ", 10000); function fc_" + ClickedUserName.Replace(" ", "") + "() { alert('" + ClickedUserName + "'); }</script>";
StringBuilder sb = new StringBuilder();
sb.Append(checkNewMsg + "<div class='"ch_Box'">");
sb.Append("<div class='"ch_Header'">");
sb.Append("<div style='"float:left;margin-top: 9px;margin-left: 8px;'"><img src='"Images/Status.png'"></div>");
sb.Append("<div id='"roomUsers'" class='"ch_HeaderItem'">" + ClickedUserName + "</div>");
sb.Append("<div onclick='"closePanel(this)'" style='"width: 23px; height: 27px; cursor: pointer; position: absolute; margin-left: 232px;'"><img style='"height: 20px; margin-top: 4px;'" src='"Images/close.png'"></div>");
sb.Append("<div id='"cont_" + ClickedUserID + "'" class='"panelContent'">" + FillMessages(roomID, FromUserID.ToInt()) + "</div>");
sb.Append("<div class='"ch_Text'">");
sb.Append("<input id='"msg_" + FromUserID + "_" + ClickedUserID + "_" + ClickedPerID + "_" + roomID + "'" type='"text'" class='"inp'" onkeypress='"PushText(this)'" autocomplete='"off'" /></div>");
sb.Append("</div></div>");
return sb.ToString();
}
我不知道为什么不返回script标记一个asmx,但当我删除该标记,然后在js端添加script标记后再返回值时,问题就解决了。
就像这样;
在asmx侧;
string checkNewMsg = "window.setInterval(fc_" + ClickedUserName.Replace(" ", "") + ", 10000); function fc_" + ClickedUserName.Replace(" ", "") + "() { alert('" + ClickedUserName + "'); }#func#";
在Js侧;
success: function (response) {
var msgs = response.d;
var arrCont = msgs.split('#func#');
var MsgCont = "<script type='"text/javascript'">" + arrCont[0] + "<'/script>";