2009-09-10 59 views
5

我在後面的代碼中調用Web方法,並接受4個以上字符串的Method Signature。我正在創建一個params變量並使用它來添加所有我想傳遞給該方法的輸入字段。ASP.NET Web窗體jQuery AJAX將多個參數傳遞給Web方法

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

那麼我如何在我的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 2009-09-10 13:28:51

+0

我不會假設任何有關如何良好的命令參數必須。嘗試使該順序與服務器端代碼相匹配。當你嘗試這個時,你會收到某種錯誤信息嗎? – 2009-09-10 13:39:30

+0

沒有錯誤消息,它只是沒有擊中我的Web方法的中斷點。我可以解釋每個變量是這樣的,但我不想爲每個變量都這樣做...... data:「{'showStartDate':'」+ params.showStartDate +「'}」 – aherrick 2009-09-10 13:57:02

2

這裏是我的代碼示例:

的鏈接給你看(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);  
         } 
        }); 

以及相應的WebMethod的JSON功能:

<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

所以我需要「串」我的PARAMS之前傳遞給我的網絡方法? – aherrick 2009-09-10 13:51:17

+0

我不完全確定你的問題是什麼 - 我只是發佈一個工作代碼摘錄,希望你能看看它並找出一些東西。 夫婦的想法: 1)是ajax調用進入你的網絡方法? 2)給ajax調用添加一個錯誤:部分,看看是否有相關的東西被返回。 – 2009-09-10 19:19:17

+0

我添加了一個錯誤捕獲每個建議,事實證明這不是一個無效的JSON錯誤。我的猜測是我必須明確地調出每個參數或者像你使用JSON stringify – aherrick 2009-09-13 00:55:07

1

我認爲你所缺少的是用將你的參數序列化爲JSON 10。

一些瀏覽器,如FF3 +和IE8,本地執行JSON.stringify。其他人需要參考http://json.org/json2.js(當然託管在您自己的域名)。

另外,嘗試使用從選項中刪除async:false - 也許它影響什麼,但我從來沒有使用它。

最後一件事情是:您的網絡方法網址真的是OrderSummary.aspx/JSONUpdateOrder?可能是'.asmx'而不是'.aspx'?

編輯:使用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); 
     } 
    }); 
} 
相關問題