2011-09-16 18 views
0

以下のjqueryを使用しています。配列paramlistを以下の適切なWebメソッドに送信しようとしています。私はここで何が欠けていますか?jqueryを使用してasp.net Webメソッドにパラメータ配列を送信する方法

<script type="text/javascript"> 
     $(document).ready(function() { 

      var slider = $('.slider').slider({ 
       range: "min", 
       min: 0, 
       max: 100, 
       change: function (e, ui) { 

        var paramList = new Array(); 

        var values = $('.slider').each(function() { 
         var s = $(this); 
         var aType = s.attr('itemName'); 
         var point = s.slider("option", "value"); 
         paramList.push(aType); 
         paramList.push(point); 


        }); 

        CallPageMethod("SliderChanged", paramList, success, fail); 
        //     $("#img1").fadeOut(); 
        //     alert("done"); 
       }, 
       slide: function (e, ui) { 
        var point = ui.value; 
        $("#selected_value").html(point); 
        //     var width = 100 - point; 
        //     $("#range").css({ "width": point + "%" }); 
       } 

      }); 

      function CallPageMethod(methodName, paramArray, onSuccess, onFail) { 

       //create list of parameters in the form 
       //{"paramName1":"paramValue1","paramName2":"paramValue2"} 

       var paramList = ''; 
       if (paramArray.length > 0) { 
        for (var i = 0; i < paramArray.length; i += 2) { 
         if (paramList.length > 0) paramList += ","; 
         paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"'; 
        } 
       } 
       paramList = '{' + paramList + '}'; 


       //get the current location 
       var loc = window.location.href; 
       loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "default.aspx" : loc; 

       //call the page method 
       $.ajax({ 
        type: "POST", 
        url: loc + "/" + methodName, 
        data: paramList, 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: onSuccess, 
        fail: onFail 

       }); 

      } 


      function success(response) { 

       var lbl = $('#<%= Label1.ClientID %>') 
       lbl.html("Your report is now ready for download."); 
       alert(response.d); 

      } 

      function fail(response) { 
       alert("An error occurred."); 
      } 

     }); 


    </script> 

私は、次のWebメソッドを持っています:

[WebMethod] 
    public static string SliderChanged(string[] values) 
    { 

     return "successArray"; 


    } 
+0

私はあなたがメッセージ名を指定せずにwebMethodsのでのオーバーロード機能を行うことができるとは思いませんでした。あなたはあなたがこれでテストソリューションを作る必要がないようになってきているというエラーを説明できますか?ソース:http://msdn.microsoft.com/en-us/library/byxd99hx(VS.71).aspx#vbtskusingwebmethodattributemessagename –

+0

私が知る限り、最後に私が確認したところでは、Webメソッド名をオーバーロードすることはできません。パラメータタイプだけで過負荷を区別する能力を持たないSOAP要求に生成されるため、 – Nikki9696

+0

Ok - 私は1つの方法しか持っていません(もはや過負荷ではありません)。私はビジュアルスタジオでブレークポイントを設定し、Webメソッドも成功メソッドも失敗メソッドもヒットしません。 – FiveTools

答えて

1

他の人が言ったように、あなたはパラメータ名を指定する必要があります。そのため、

data: paramList, 

は次のようになります。

data: '{ "values":'+paramList+'}', 
1

いくつかの観察:

  1. は通常、あなたのWebサービスは、.asmxファイルとして提供されます。
    あなたのAJAX呼び出しでは、その場所を指定します。.aspx-ページではありません。
    など。 url: "/WebService.asmx/" + methodName,

  2. あなたのウェブサービスがJavascriptからアクセスできることを確認してください。行うには
    ので、クラスを飾る:
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService {

+0

それは私の問題ではありませんが、これは誰かを助けるでしょう。 – FiveTools

関連する問題