2014-10-01 185 views
-1

我想从ASMX作为字符串返回JavaScript函数,像下面的JavaScript函数..呼叫从ASMX

所有的HTML标签返回,但checkNewMsg变种“脚本标签”犯规回报! 真的会发生什么?

请指点

<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(); 
} 
+0

我想问你...为什么你使用Json作为响应格式,然后注入一堆HTML?发射数据,然后在客户端格式化数据 – InferOn 2014-10-01 11:53:58

+0

因为有这么多的连接_(** ID(ID从数据库)**)div和我必须知道哪个div reqiure js功能。 – Erdogan 2014-10-01 11:57:41

+0

显然这不能解决具体的问题,但在我看来,你尝试用锤子打开螺丝:) – InferOn 2014-10-01 12:06:47

回答

0

我不知道为什么不返回脚本标签的ASMX但是当我删除标记,然后在js一边我的返回值问题之前添加脚本”标签解决了。

就像这样;

在asmx方;

string checkNewMsg = "window.setInterval(fc_" + ClickedUserName.Replace(" ", "") + ", 10000); function fc_" + ClickedUserName.Replace(" ", "") + "() { alert('" + ClickedUserName + "'); }#func#"; 

在Js Side;

success: function (response) { 
       var msgs = response.d; 
       var arrCont = msgs.split('#func#'); 
       var MsgCont = "<script type=\"text/javascript\">" + arrCont[0] + "<\/script>";