Заполнение списка с помощью JSON с помощью jQuery не работает

#jquery #asp.net #json

#jquery #asp.net #json

Вопрос:

Я хочу заполнить список с помощью jQuery / Json. Ниже приведен код, который я пытаюсь использовать.

jQuery внутри document.ready:

 $('#<%=txtSearch.ClientID %>').keyup(function() {
        if ($('#<%=txtSearch.ClientID %>').val().length > 1) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                //data: "{ prefixText: '"   $('#<%=txtSearch.ClientID %>').val()   "', count: '5'}",
                data: "{ sText: '"   $('#<%=txtSearch.ClientID %>').val()   "', sFilter: ' "   $('#<%=lsResults.ClientID %>').val()   "'}",
                url: "../cspm/s3.asmx/GetResults",
                dataType: "json",
                success: function(data) {
                    var results = data.d;
                    if (results.length > 0) {
                        var listItems = [];
                        for (var key in results) {
                            listItems.push('<option value="'  
                            results[0].toString()   '">'   results[1].toString()
                              '</option>');
                        }
                        $('#<%=lsResults.ClientID %>').append(listItems.join(''));
                    }
                }
            });
        }

    });
  

Код метода веб-сервиса:

 <WebMethod()> _
Public Function GetResults(ByVal sText As String, ByVal sFilter As String) As String(,)

    Dim searchText As String() = sText.Trim().Split(New Char() {" "c})
    Dim array(2, 2) As String

    sql = New StringBuilder()

    'If ddlProductLine.SelectedValue <> "INSTRUMENT" Then
    sql.Append("select msi.inventory_item_id,msi.description, msi.segment1 || '.' || msi.segment2 || '  -  ' || msi.description text ")
    sql.Append("from apps.mtl_system_items_b MSI, APPS.MTL_ITEM_CATEGORIES MIC, APPS.MTL_CATEGORIES_B MC ")
    sql.Append("where MSI.INVENTORY_ITEM_ID = MIC.INVENTORY_ITEM_ID ")
    sql.Append("AND MSI.ORGANIZATION_ID = MIC.ORGANIZATION_ID AND MIC.CATEGORY_ID = MC.CATEGORY_ID AND MIC.CATEGORY_SET_ID = 1 AND MSI.organization_id = 83 ")
    sql.Append("AND msi.inventory_item_status_code = 'Active' ")
    sql.Append("and msi.description like '%"   searchText(0).ToUpper()   "%' ")

    For i As Integer = 1 To searchText.Length - 1
        sql.Append("and msi.description like '%"   searchText(i).ToUpper()   "%' ")
    Next

    sql.Append("and mc.SEGMENT1 like '%"   sFilter   "%' ")
    sql.Append("order by msi.description ")
    'End If

    Dim dt As DataTable = db.ExecuteDataTable(sql.ToString())

    For i As Integer = 0 To dt.Rows.Count
        array(i, 0) = dt.Rows(i)("inventory_item_id").ToString()
        array(i, 1) = dt.Rows(i)("text").ToString()
    Next

    Return array

End Function
  

Похоже, это должно сработать, но я новичок в использовании json с jQuery.

Ответ №1:

Я думаю, проблема в этом блоке

 for (var key in results) {
   listItems.push('<option value="'  
   results[0].toString()   '">'   results[1].toString()
     '</option>');
}
  

измените его на

 for (var i=0; i<results.length; i  ) {
   listItems.push('<option value="'  
   results[i][0]   '">'   results[i][1]
     '</option>');
}