2009-09-10 11 views
5

Wywołuję metodę sieci Web w kodzie za pomocą podpisu metody, który ma 4+ ciągi akceptowane. Tworzę zmienną params i używam jej do dodania wszystkich pól wejściowych, które chcę przekazać do metody.ASP.NET Web Forms jQuery AJAX Przekaż wiele parametrów do metody WWW

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

Jak mogę przekazać "parametry" w moim wywołaniu AJAX? Poniżej znajduje się mój obecny kod, który wydaje się nie działać. Nie chcę, aby każdy parametr był przekazywany jawnie w sekcji danych.

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

Odpowiedz

0

można przekazać params sobie, bez otaczających szelkami.

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

Czy na pewno o tym z metody sieci Web? Moja metoda sieciowa nie jest nazywana po prostu przekazywaniem "params" według twojej sugestii. Czy parametry muszą być w tej samej kolejności, co Podpis metody? Nie sądzę, żebym tak ... – aherrick

+0

Nie przyjąłbym niczego o tym, jak dobrze uporządkować parametry. Spróbuj sprawić, aby zamówienie było zgodne z kodem po stronie serwera. Czy otrzymujesz komunikat o błędzie, gdy próbujesz tego? –

+0

Brak komunikatu o błędzie, po prostu nie trafia w punkt przerwania w mojej metodzie internetowej. Mogę wyjaśnić każdą zmienną, ale nie chcę tego robić dla każdego ... Dane: "{'showStartDate": "" + params.showStartDate + "'}" – aherrick

2

Oto przykład z mojego kodu:

Link do funkcji JSON widać (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);  
         } 
        }); 

i odpowiadająca WebMethod:

<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

Więc muszę "stringify" moje parametry przed przekazaniem go do mojej metody internetowej? – aherrick

+0

Nie jestem do końca pewien, co to jest problem - właśnie opublikowałem działający fragment kodu w nadziei, że obejrzysz go i coś wymyślisz. Kilka myśli: 1) Czy wywołanie ajax jest dostępne w twojej sieci? 2) Dodaj błąd: sekcja do wywołania ajax, aby zobaczyć, czy coś istotnego jest zwracane. –

+0

Dodałem błąd błędu na podstawie Twojej sugestii i okazało się, że nie był to nieprawidłowy błąd JSON. Domyślam się, że muszę jawnie wywołać każdy param lub jak użyć stringify JSON – aherrick

1

I myślę, że brakuje ci serializacji parametrów do JSON z JSON.stringify(data).

Niektóre przeglądarki, takie jak FF3 + i IE8, implementują domyślnie JSON.stringify. Inni potrzebują odwołania do http://json.org/json2.js (hostowane oczywiście w twojej domenie).

Spróbuj także usunąć opcję async:false z opcji - może to wpłynie na nic, ale nigdy jej nie użyłem.

Jedna ostatnia rzecz: czy adres URL metody WWW rzeczywiście jest OrderSummary.aspx/JSONUpdateOrder? Czy może to być ".asmx" zamiast ".aspx"?

Edytuj: użyj numeru fiddler, aby zobaczyć, jaka odpowiedź zwraca serwer, jeśli istnieje.

0

W prosty sposób wypróbować ten kod jego pracy

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); 
     } 
    }); 
} 
Powiązane problemy