【问题标题】:Calling asp.net page method from javascript not working in Firefox从 javascript 调用 asp.net 页面方法在 Firefox 中不起作用
【发布时间】:2011-05-01 18:23:14
【问题描述】:

我正在使用带有 javascript 的 PageMethod 来调用服务器端代码:

 function getMonths() {

   PageMethods.BindMonthlyPeriods(getMonthsSuccess, onFailure);            }
 }

 function getMonthsSuccess(result, userContext, methodName) {

    var picker = document.getElementById("monthPicker");

    for (var i = 0; i < result.length; i++) {

        var newOption = document.createElement('option');
        newOption.text = result[i];
        newOption.value = result[i];

        picker.add(newOption); 
    }
}

在代码隐藏中:

    [WebMethod]
    public static string[] BindMonthlyPeriods()
    {

    }

这在 IE / Chrome 中可以正常工作,但在 Firefox 中则不行。没有特定的错误消息,数据只是没有填充到 Firefox 中。

我也尝试过使用 jQuery ajax 调用,但这不起作用,虽然我不确定我是否正确地完成了它:

 function getMonths() {

    $.ajax({
        type: "POST",
        url: "page.aspx/BindMonthlyPeriods",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {

            var picker = document.getElementById("monthPicker");

            for (var i = 0; i < msg.length; i++) {

                var newOption = document.createElement('option');
                newOption.text = result[i];
                newOption.value = result[i];

                picker.add(newOption);
            }

        }
    });

编辑

使用 Firebug,我在“网络”选项卡中没有发现任何错误消息,但在“控制台”选项卡中发现了这个错误:

未捕获的异常:[异常...“没有足够的参数”nsresult:“0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)”位置:“JS 框架 :: http://xxxxx.xxxxxxx.com/.../page.aspx :: getMonthsSuccess :: line 251”数据:否]

【问题讨论】:

  • @Sean,你能用firebug看看是什么问题吗,它清楚地显示了ajax中的错误
  • jQuery ajax 调用在 IE 中也不起作用。我认为 id 宁愿使用 jquery 方法而不是 PageMethod 方法。生病检查萤火虫。
  • @sean,使用firebug调试,很容易找到问题所在,看net tab的resonse。
  • @sean 是你的方法需要任何参数,如果是这样,它在那里失败
  • 该方法没有任何参数,只是返回一个字符串[]。

标签: javascript asp.net json jquery pagemethods


【解决方案1】:

通过在月份选择器的 'add' 方法中添加 null 参数解决了这个问题:

picker.add(newOption, null);

【讨论】:

    【解决方案2】:
    < asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"
                    OnClientClick="return saveChanges()" />   **Script:**  var isPostBack=false; function saveChanges() { if(!isPostBack){
             PageMethods.savePageChanges(tableData, updateContent_OnSucceeded,      updateContent_onFailure);
      return false;
      }else{ 
         return true;}
       }
    
    
    
    
        function updateContent_OnSucceeded(retval) {
           isPostBack=true;
          $('# <%=btnSave.ClientID%>).click();
        }
    
        function updateContent_onFailure(val) {
            alert("Error: " + val.get_message());
    
        }**CS:**[System.Web.Services.WebMethod]
    public static bool savePageChanges(List<List<string>> rowDataArraySeries)
    {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多