2009-09-10 16 views
5

4つ以上の文字列を受け入れるメソッドシグネチャを持つコードのWebメソッドを呼び出しています。 params変数を作成し、メソッドに渡すすべての入力フィールドを追加するために使用しています。ASP.NET WebフォームjQuery AJAX複数のパラメータをWebメソッドに渡す

どのようにAJAX呼び出しで "params"を渡すのですか?以下は私の現在のコードですが、動作していないようです。データセクションで明示的に各パラメータを渡す必要はありません。

   $.ajax({ 
        type: "POST", 
        url: "OrderSummary.aspx/JSONUpdateOrder", 
        async: false, 
        data: "{'" + params + "'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(data) { 
        } 
       }); 

答えて

0

パラメタ自体は、中括弧なしで渡すことができます。

var params = 
{ 
    "showStartDate": showStartDate, 
    "showEndDate": showEndDate, 
    "arrivalDate": arrivalDate, 
    "pickUpDate": pickUpDate 
}; 

$.ajax({ 
    type: "POST", 
    url: "OrderSummary.aspx/JSONUpdateOrder", 
    async: false, 
    data: params, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data) { 
    } 
}); 
+0

作業このコードを試してみてください、あなたは、Webメソッドを使用してこの程度か?私のWebメソッドは、あなたの提案ごとに "params"を渡すだけでは呼ばれていません。パラメータはメソッドシグネチャと同じ順序でなければなりませんか?私はそうは思わないでしょう... – aherrick

+0

私は、パラメータがどれだけ順調であるかについては何も想定しません。その順序をサーバー側のコードと一致させるようにしてください。これを試してみると何らかのエラーメッセージが出ますか? –

+0

Webメソッドのブレークポイントにヒットしないエラーメッセージはありません。私はこのような各変数を明白に渡すことができますが、私はそれぞれのためにそれをしたくありません... データ: "{'showStartDate': '" + params.showStartDate + "'}" – aherrick

2

ここに私のコードの例です:

ご覧JSON機能(http://www.json.org/js.html

var selected = $("#ddPackageContainerType option:selected");  
var DTO = JSON.stringify({ sContainerType: selected.val(), sLocation: '<%=Location%>' }); 

        $.ajax({ 
         data: DTO, 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         url:"helpers/packinguiservice.asmx/GetContainerDetail", 

         success: function (data, textStatus) { 
          var oContainerDetail = JSON.parse(data); 

          //Fill In All the data returned 
          $('#txtPackageLength').val(parseFloat(oContainerDetail.Length).toFixed(1)); 
          $('#txtPackageWidth').val(parseFloat(oContainerDetail.Width).toFixed(1)); 
          $('#txtPackageHeight').val(parseFloat(oContainerDetail.Height).toFixed(1)); 
          $('#ddPackageDimensionsUOM').val(oContainerDetail.LengthUOM); 
          $('#txtPackageWeight').val(parseFloat(oContainerDetail.PackageWeight).toFixed(1)); 

          hideInfoOverlay(); 
         }, 
         error: function(objXMLHttpRequest, textStatus, errorThrown) { 
          //Show Error 
          hideInfoOverlay(); 
          showErrorOverlay(' ' + objXMLHttpRequest.responseText);  
         } 
        }); 

と、対応するWebメソッドへのリンク:

<WebMethod()> _ 
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
    Public Function GetContainerDetail(ByVal sContainerType As String, ByVal sLocation As String) As String 
     Dim oPackageInfo As New Dictionary(Of String, String)() 
     Dim oPackage As Pacejet.Base.Package 

     Try 
      AppStatic.MyLocation = sLocation 

      oPackage = Pacejet.Base.Package.GetPackageByKey(sContainerType) 
      If Not oPackage Is Nothing Then 
       oPackageInfo.Add("Length", oPackage.Length.Value) 
       oPackageInfo.Add("Width", oPackage.Width.Value) 
       oPackageInfo.Add("Height", oPackage.Height.Value) 
       oPackageInfo.Add("LengthUOM", oPackage.LengthUOM.Value) 
       oPackageInfo.Add("PackageWeight", oPackage.StandardWeight.Value) 
      End If 

     Catch ex As Exception 
      Throw New HttpException(System.Net.HttpStatusCode.InternalServerError, ex.Message) 
     End Try 

     Return New JavaScriptSerializer().Serialize(oPackageInfo) 
    End Function 
+0

私はウェブメソッドに渡す前に、私のパラメータを "文字列化"する必要がありますか? – aherrick

+0

私はあなたの問題が何であるか正確にはわかりません - 私はちょうどあなたがそれを見て何かを描くことを望んで作業コードの抜粋を投稿していました。 カップルの考え: 1)あなたのウェブメソッドに入るajaxコールですか? 2)ajax呼び出しにエラー:セクションを追加して、関連するものが返されているかどうかを確認します。 –

+0

あなたの提案ごとにエラーキャッチを追加しました。無効なJSONエラーではありませんでした。私の推測では、明示的に各パラメータを呼び出さなければならないか、JSON文字列を使用するかのように – aherrick

1

私はあなたが欠けているのは、でJSONにパラメータをシリアライズすることだと思います10。

FF3 +やIE8などのブラウザには、ネイティブにJSON.stringifyが実装されています。他の人にはhttp://json.org/json2.jsへの参照が必要です(もちろんあなた自身のドメインでホストされています)。

また、オプションから削除async:falseを使用してみてください - おそらくそれは何も影響しませんが、私はそれを使用したことはありません。

最終的な1つ:あなたのWebメソッドのURLは本当にOrderSummary.aspx/JSONUpdateOrderですか? '.aspx'ではなく '.asmx'にすることができますか?

編集:サーバーが返す応答がある場合は、fiddlerを使用してください。簡単な方法で

0

は、そのが

function ShowAvailability() { 
    $.ajax({ 
     type: "POST", 
     url: "CS.aspx/CheckUserName", 
     data: '{userName: "' + $("#<%=txtUserName.ClientID%>")[0].value + '",userName1: "' + $("#<%=TextBox1.ClientID%>")[0].value + '" }', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: OnSuccess, 
     failure: function(response) { 
      alert(response); 
     } 
    }); 
} 
関連する問題