【问题标题】:Showing Loading Image in Modal Popup Extender in Webservice ajax call在 Webservice ajax 调用中的 Modal Popup Extender 中显示加载图像
【发布时间】:2011-03-01 21:29:30
【问题描述】:

我使用 .ajax 调用 web 服务方法,将电子邮件发送到输入的电子邮件。

我想展示一个 ajax 模态弹出扩展器,其中包含一个图像,上面写着“sendig...”

我使用 .ajax 来调用我的网络服务,例如:

var SendingModal = $find('SendMPE');
    var Resend = -1;
    $.ajax({
             async: false,
             type: "POST",
             url: "FinKaynWebService.asmx/SendEmail",
             data: "{'Email': '" + Email + "'}",
             contentType: "application/json; charset=utf-8",
             dataType: "json",
             beforeSend: function() {
                 $("#SendMPE").show();
             },
             success: function(response) {
                 Resend = response.d;
                 SendingModal.hide();
              },
              failure: function(msg) {
                 alert('Sending Email failed,try later');
              }
    });

问题是我的 SendMPE 没有显示。

<div id="SendingDiv" style="display:none;background-color:Yellow;color:Blue;">
     <img id="LoadingImage" alt="Still sending"  src="./Images/Sending.gif" />
    <span style="margin-left:10px;">Sending...</span>
    <asp:Button ID="CloseButton" runat="server" style="display:none;" />
</div>
<asp:ModalPopupExtender ID="SendMPE" X="200" Y="200" runat="server" 
                    TargetControlID="SendHiddenButton" PopupControlID="SendingDiv" 
           CancelControlID="CloseButton"></asp:ModalPopupExtender>

这个问题是图片引起的还是什么原因?

谁有想法或已经做过类似的事情:在弹出窗口中加载图像。

【问题讨论】:

    标签: jquery asp.net ajax web-services


    【解决方案1】:

    首先你应该使用

    data: '{"Email": "' + Email + '"}'
    

    或更好

    data: JSON.stringify({Email: Email})
    

    而不是

    data: "{'Email': '" + Email + "'}"
    

    详情请参阅this answer

    再说一句。事件beforeSend(jqXHR, settings) 应该用于在发送之前修改jqXHR(在jQuery 1.4.x 中,XMLHTTPRequest)对象(参见jQuery.ajax 文档)。在您的情况下,您可以在 $.ajax 调用之前放置 $("#SendMPE").show();

    此外,您可能想使用$("#SendingDiv").show();

    【讨论】:

    • webservice 方法在我调试时正在执行。$("#SendMPE").show() 问题只是没有显示 div。发送电子邮件后显示另一个弹出窗口但不是这个。
    • @user594166:对不起,那么您调试另一个代码,就像您在此处发布的那样。结果应该是错误{"Message":"Unrecognized escape sequence. (19): {\u0027Email\u0027: \u0027\Your.email@domain.com"\u0027}","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer...。但是因为您使用不存在的failure: function(msg) 而不是error(jqXHR, textStatus, errorThrown),所以您永远不会看到任何错误。我在您的另一个问题中看到您使用了JSON.stringify,所以您知道这一点。可能您调试的不是您发布的代码。
    • @user594166:您是否尝试在$.ajax 之前使用$("#SendingDiv").show(); 而不是$("#SendMPE").show()beforeSend 内部。或者你可以使用SendingModal = $("#SendingDiv"); SendingModal.show();?
    • 我已经删除 beforesend.No @Oleg,显示一个模态弹出扩展器,我们使用 var SendingModal = $find('SendMPE'); $("#SendingModal").show();我现在在 .ajax 之前调用 $("#SendingModal").show() 但没有任何反应。
    • @user594166:可能你已经用其他元素隐藏了“div#SendingDiv”。尝试添加 style="z-index:1100;"到“div#SendingDiv”。
    【解决方案2】:

    也许您应该删除 'style="display:none;'来自 SendingDiv。ModalPopupExtender 将在启动时隐藏此 div。

    【讨论】:

      【解决方案3】:

      这可能与您的想法不完全一致,但我通常遵循以下一般模式。我将请求作为通用函数(对您的目的而言并不重要),但有回调方法处理进程/错误,处理程序本身被实例化负责显示模式。

      AJAX 调用:

      var data = $.toJSON("{'obj:' + obj + "}");
      var URI = "/FinKaynWebService.asmx/SendEmail";
      var MSG = $("#modalDiv")
      ajaxRequest(data, URI, new genericHandler(msg));
      

      AJAX 函数:

      function ajaxRequest(requestData, serviceURI, handler) {
      
        $.ajax({
          type: "POST",
          contentType: "application/json; charset=utf-8",
          url: serviceURI,
          data: requestData,
          dataType: "json",
          cache: false,
          success: function(result) {
            callbackFunction.Process(result);
          },
          error: function(msg) {
            callbackFunction.OnError(msg.responseText)
          }
        });
      
      }
      

      处理程序:

      function genericHandler(msg) {
        $.blockUI(msg)
        this.Process = function(d) { alert("Data updated sucessfully.") };
        this.OnError = function(d) { alert(d.toString()) };
      }
      

      【讨论】:

      • 问题不在于呼叫没有发生。呼叫发生,并且电子邮件已发送。问题是当我在发送按钮中调用 .show() 时,我的 senddiv 不显示点击事件。当我在另一个链接点击事件中调用它时,我的发送 div 显示。
      猜你喜欢
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多