Веб-формы ASP.NET jQuery AJAX Передача нескольких параметров в веб-метод - PullRequest
5 голосов
/ 10 сентября 2009

Я вызываю веб-метод в коде с подписью метода, которая имеет 4+ принятых строк. Я создаю переменную params и использую ее для добавления всех полей ввода, которые я хочу передать методу.

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

Как мне тогда передать "params" в моем вызове AJAX? Ниже мой текущий код, который, кажется, не работает. Я не хочу явно передавать каждый параметр в разделе данных.

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

Ответы [ 4 ]

2 голосов
/ 10 сентября 2009

Вот пример из моего кода:

Ссылка на функции 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);    
                        }
                    });

и соответствующий 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
1 голос
/ 14 октября 2009

Я думаю, что все, что вам не хватает, это сериализация ваших параметров в JSON с JSON.stringify(data).

Некоторые браузеры, такие как FF3 + и IE8, изначально поддерживают JSON.stringify. Другим нужна ссылка на http://json.org/json2.js (конечно, на вашем собственном домене).

Также попробуйте удалить async:false из опций - возможно, это ни на что не повлияет, но я никогда не использовал его.

И последнее: действительно ли URL вашего веб-метода OrderSummary.aspx/JSONUpdateOrder? Может ли это быть «.asmx» вместо «.aspx»?

Редактировать: используйте fiddler , чтобы увидеть ответ сервера, если таковой имеется.

0 голосов
/ 22 июня 2010

Просто попробуйте этот код, работающий

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);
        }
    });
}
0 голосов
/ 10 сентября 2009

Вы можете передавать параметры самостоятельно, без скобок.

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) {
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...