$ .ajax json方法没有点击web方法

时间:2010-09-22 20:19:39

标签: javascript asp.net jquery ajax

当这个函数被命中时,它不会在代码后面调用我的函数?为什么会这样呢?我该如何解决这个错误。

$(document).ready(function() {
           $('[id$=btn_Update]').click(function() { 

           var reten = $('[id$=txt_Reten]').val();
            var i=0; 
            var selectValues = "";
            var ProdID = new Array();         
            $("#lst_ProdId option").each(function() {  
                 selectValues = selectValues + $(this).text() + ",";                 
                 ProdID[i] = $(this).text();
                 i++;

             });  
             for(var j=0; j < ProdID.length;j++)
             {
               // alert(ProdID[j]);
             }

          var params = "{'ProdID':'" + ProdID + "','RetenP':'" + reten + "'}";
             $.ajax({
                    type: "POST",
                    url: "/ProductPricing/Products/RetenPeriod.aspx/UpdateRetenPeriod",
                    data: params,
                    contentType: "application/json; charset=utf-8",                    
                    datatype: "json",
                    success: function(result) {
                        alert("sucess");
                    },
                    error:function(e) {
                        alert(e.statusText);
//                        if(errorThrown != null)
//                            alert(textStatus+ ":"+errorThrown);
//                        else
//                            alert("fail");
                    }
                    });             
             return false;
             });
             return false;
        });

这是我的代码背后的webmethod:

[WebMethod]
public static bool UpdateRetenPeriod(string[] ProdID,string RetenP)  
{
     for (int i = 0; i < ProdID.Length; i++)
     {
        update(ProdID[i],RetenP);
      }

    return true;

}

4 个答案:

答案 0 :(得分:1)

是否调用error方法?

您需要返回JSON。不是布尔值。也许像{success: true}

然后:

success: function(data) {
   if(data.success) {
       ...
   }

   else {
      ...
   }
}

jQuery期望JSON,如果它没有收到格式良好的JSON,就会抛出错误。另外,你得到的确切反应是什么?你可以使用像Firebug这样的东西来解决这个问题。

还有一件事。您能否验证是否可以成功点击该URL?您是否能够成功将浏览器指向http://your.url.here/ProductPricing/Products/RetenPeriod.aspx/UpdateRetenPeriod

另请参阅Pointy的解决方案。您的请求不太可能成功,因为您没有传入实际的对象字面值。

答案 1 :(得分:1)

您将参数作为字符串而不是对象文字传递:

 var params = "{'ProdID':'" + ProdID + "','RetenP':'" + reten + "'}";

应该(几乎可以肯定)是:

 var params = {'ProdID': ProdID,'RetenP': reten};

另外,你如何知道 ajax请求没有进入服务器?您是否尝试使用TamperData(适用于Firefox)或Firebug(也适用于Firefox)来跟踪HTTP请求?

答案 2 :(得分:0)

您是否在标记中定义了ScriptManager,并将EnablePageMethods设置为true?

另外,我相信你的params行应该是:

var params = "{ProdID:'" + ProdID + "', RetenP:'" + reten + "'}";

我在自己的应用程序中有几个函数可以这样做。你希望params的值看起来像这样:“{ProdID:'1,2',RetenP:'undefined'}”

您可以将断点置于警戒状态(e.statusText);看看错误信息是什么?

答案 3 :(得分:0)

您有错误消息..请尝试收到错误消息

我认为,您可以通过替换错误块

来使用它
error:
   function(XMLHttpRequest, textStatus, errorThrown){
         alert( "Error Occured!" + errorThrown.toString());
   }

我认为,问题出现在代码隐藏方法之后..如果在[web方法]有任何问题,那么ajax不会调用该方法..