【问题标题】:Call javascript function from asmx从 asmx 调用 javascript 函数
【发布时间】:2014-10-01 11:28:57
【问题描述】:

我想从 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();
}

【问题讨论】:

  • 我想问你……你为什么使用Json作为响应格式,然后注入一堆HTML?发出数据,然后在您的客户端中格式化该数据
  • 因为有这么多的cont_(id(id from db)) div,我必须知道哪个div需要js函数。
  • 显然这并不能解决具体问题,但在我看来,您尝试用锤子拧螺丝:)
  • 我会尝试一下,谢谢。

标签: c# json web-services asmx


【解决方案1】:

我不知道为什么不返回脚本标签 asmx 但是当我删除标签然后在 js 端同时我在返回值之前添加脚本标签时问题就解决了。

就这样;

在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>";

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 2014-02-12
    • 2018-01-11
    • 2014-09-14
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多