Требуется помощь при вызове веб-метода с помощью JQuery-AJAX - PullRequest
0 голосов
/ 03 мая 2011

Пожалуйста, помогите с моим окончательным проектом в моем вводном / промежуточном классе программирования.

Используя хранимые процедуры, адаптеры таблиц и бизнес-классы, он хочет, чтобы мы заполнили представление сетки ASP.NET полями из таблицы «Поставщик» (у меня это работает).

Затем он хочет, чтобы мы перечислили продукты для каждого поставщика, используя хранимую процедуру, передав параметр для вывода списка продуктов на основе идентификатора поставщика.Я могу сделать это, используя объекты ASP.NET и функции визуального просмотра сетки (свойство gridview "select" для передачи параметра dataobjectsouruces).

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

Когда я запускаю это, я получаю предупреждение об ошибке.Я также не знаю, как написать функцию успеха AJAX для отображения потенциально нескольких строк информации о продукте (массив?)

Любая и вся помощь очень ценится, весь код ниже,

Спасибо !!

<script type="text/javascript">
    $(document).ready(function () {
        $("#Button1").click(function () {
            var supplierid = { supplierid: $('#DropDownList1').val() };
            supplierid = JSON.stringify(supplierid);
            alert(supplierid);
            $.ajax({
                type: "POST",
                dataType: "JSON",
                data: supplierid,
                contentType: "application/JSON",
                url: "MainForm.aspx/getProductDetails",
                success: function (data) {
                    $.each((data.d), function(index,m) {
                        $('#output').append('<p><strong>' + m.productid +
                        ' ' + m.productname + ' ' + m.supplierid + ' ' + m.categoryid + ' ' + unitprice + '</strong></p>');
                    });
                },
                error: function (x, e) {
                    alert("The call to the Supplier failed. " + x.responseText);
                }
            })
        });
    });
</script>

MainForm.aspx:

Partial Class MainForm
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function getProductDetails(ByVal supplierid As Integer) As List(Of Products)
    Dim prodData As New ProductData
    Return prodData.getProductById(supplierid)
End Function

'ЭТА ЧАСТЬ БУДЕТ НАСЕЛЕНА В СПИСКЕ КАПЛИ ВНИЗ

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Dim supplierdata As New supplierdata
    DropDownList1.DataSource = supplierdata.getSupplierData()
    DropDownList1.DataTextField = "companyname"
    DropDownList1.DataValueField = "supplierid"
    DropDownList1.DataBind()
End Sub

"Продукты"и классы "productData" и бизнес-функции:

Public Class Products
    Public Property productid As Integer
    Public Property productname As String
    Public Property supplierid As Integer
    Public Property categoryid As Integer
    Public Property unitprice As Integer
End Class

Public Class ProductData
    Public Function getProductById(ByVal supplierid As Integer) As List(Of Products)
        Dim ProductList As New List(Of Products)
        Dim dt As New DataSet1.GetProductdataBySupplierDataTable
        Dim productRow As DataSet1.GetProductdataBySupplierRow

        //  retrieves the data from the database and loads into the datatable
        // closes the connection at the end.

        Using ta As New DataSet1TableAdapters.GetProductdataBySupplierTableAdapter
            Try
                dt = ta.GetProdcutsbySupplier(supplierid)
                If dt.Count = 0 Then
                     //no matching record found, return false
                    Throw New ApplicationException("Retrieve: No such record")
                Else

                    productRow = dt(0)
                    Dim aProduct As New Products()
                    With aProduct
                        .productid = productRow.productid
                        .productname = productRow.productname
                        .supplierid = productRow.supplierid
                        .categoryid = productRow.categoryid
                        .unitprice = productRow.unitprice
                    End With
                    ProductList.Add(aProduct)
                End If
            Catch ex As Exception
                Throw New ApplicationException("Error Getting Members " & ex.Message)
            End Try
        End Using
        Return ProductList
    End Function
End Class

1 Ответ

0 голосов
/ 03 мая 2011

Первая проблема (причина, по которой вы оказались в обработчике ошибок) заключается в том, что вам нужно передать строку JSON в WebMethod:

$(document).ready(function () {
    $("#Button1").click(function () {
        // Use a JSON string, not a JavaScript object.
        var supplierid = '{ "supplierid": "' + $('#DropDownList1').val() + '" }';
        supplierid = JSON.stringify(supplierid);
        alert(supplierid);
        $.ajax({
            type: "POST",
            // Possible issue: dataType is case sensitive.
            dataType: "json",
            data: supplierid,
            contentType: "application/json",
            url: "MainForm.aspx/getProductDetails",
            success: function (data) {
                $.each((data.d), function(index,m) {
                    $('#output').append('<p><strong>' + m.productid +
                    ' ' + m.productname + ' ' + m.supplierid + ' ' + m.categoryid + ' ' + unitprice + '</strong></p>');
                });
            },
            error: function (x, e) {
                alert("The call to the Supplier failed. " + x.responseText);
            }
        })
    });
});

См. Здесь для получения дополнительной информации об этой конкретной ошибке: http://encosia.com/2010/05/31/asmx-scriptservice-mistake-invalid-json-primitive/


Обновление:

Другая проблема, с которой вы сталкиваетесь, заключается в том, что Button1 - это кнопка отправки, которая при нажатии отправляет форму страницы.Таким образом, даже если вы запускаете запрос AJAX, отправка формы действует как обновление страницы до того, как ответ возвращается, и он теряется.Вот почему вы не видите значимого сообщения об ошибке.

Этого можно избежать, вызвав функцию extractDefault () в вашем обработчике кликов, например:

$(document).ready(function () {
  $("#Button1").click(function (evt) {
    // This prevents the form submission from happening.
    evt.preventDefault();

    // The rest of your previous code here...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...