2009-09-10 35 views
5

Tôi đang gọi một Phương thức web trong mã phía sau bằng Chữ ký phương thức có 4 chuỗi được chấp nhận. Tôi đang tạo một biến params và sử dụng nó để thêm tất cả các trường đầu vào mà tôi muốn chuyển cho phương thức.Biểu mẫu web ASP.NET jQuery AJAX Chuyển nhiều tham số đến Phương thức web

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

Làm cách nào để chuyển "params" trong cuộc gọi AJAX? Dưới đây là mã hiện tại của tôi mà dường như không hoạt động. Tôi không muốn phải vượt qua từng param một cách rõ ràng trong phần dữ liệu.

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

Trả lời

0

Bạn có thể tự chuyển thông số, không có dấu ngoặc ôm kèm theo.

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

Bạn có chắc chắn về điều này với phương pháp Web? Phương pháp Web của tôi không được gọi là chỉ cần chuyển "params" theo đề xuất của bạn. Các tham số có phải theo thứ tự giống như Chữ ký Phương thức không? Tôi sẽ không nghĩ như vậy ... – aherrick

+0

Tôi sẽ không giả định bất cứ điều gì về cách thức đặt hàng các tham số có được. Cố gắng làm cho thứ tự đó khớp với mã phía máy chủ. Bạn có nhận được một thông báo lỗi của một số loại khi bạn thử điều này? –

+0

Không có thông báo lỗi nó chỉ không nhấn điểm break trong phương pháp Web của tôi. Tôi có thể expliclity vượt qua mỗi biến như thế này nhưng tôi không muốn làm điều đó cho mỗi một ... dữ liệu: "{'showStartDate': '" + params.showStartDate + "'}" – aherrick

2

Dưới đây là một ví dụ từ mã của tôi:

Một liên kết đến các chức năng JSON bạn nhìn thấy (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);  
         } 
        }); 

Và WebMethod tương ứng:

<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

Vì vậy, tôi cần phải "xâu chuỗi" các thông số của tôi trước khi chuyển nó sang phương thức web của tôi? – aherrick

+0

Tôi không chắc chắn vấn đề của bạn là gì - tôi vừa đăng một đoạn trích đoạn mã hoạt động với hy vọng bạn có thể xem nó và tìm ra điều gì đó. Suy nghĩ của hai người: 1) Cuộc gọi ajax có được đưa vào phương pháp web của bạn không? 2) Thêm lỗi: phần vào cuộc gọi ajax của bạn để xem có bất kỳ điều gì liên quan đang được trả lại hay không. –

+0

Tôi đã thêm lỗi khi nhận được đề xuất của bạn và hóa ra đó không phải là lỗi JSON không hợp lệ. Tôi đoán đó là tôi phải gọi một cách rõ ràng từng tham số hoặc giống như bạn sử dụng JSON stringify – aherrick

1

tôi nghĩ rằng tất cả những gì bạn đang thiếu là tuần tự hóa các tham số của bạn thành JSON với JSON.stringify(data).

Một số trình duyệt, như FF3 + và IE8, thực hiện JSON.stringify nguyên bản. Những người khác cần tham chiếu đến http://json.org/json2.js (được lưu trữ trên tên miền của riêng bạn).

Ngoài ra, hãy thử sử dụng xóa async:false khỏi các tùy chọn - có thể nó không ảnh hưởng gì cả nhưng tôi chưa bao giờ sử dụng nó.

Điều cuối cùng: URL phương thức web của bạn có thực sự là OrderSummary.aspx/JSONUpdateOrder không? Nó có thể là '.asmx' thay vì '.aspx' không?

Chỉnh sửa: sử dụng fiddler để xem phản hồi của máy chủ, nếu có.

0

Bằng cách đơn giản thử mã này nó làm việc

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); 
     } 
    }); 
} 
Các vấn đề liên quan