2013-12-17 3 views
0

У меня есть метод JavaScript для вызова всех моих вызовов ajax, см. Ниже.jquery response.d возвращает undefined

<script src="scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
    <script type = "text/javascript"> 
function PopulateSystemGroup_js() { 

      if ($('#<%=ddlComponentGroup.ClientID%>').val() == "0") { 
       $('#<%=ddlSystemGroup.ClientID %>').empty().append('<option selected="selected" value="0">Please select</option>'); 
       $('#<%=ddlFailureCode.ClientID %>').empty().append('<option selected="selected" value="0">Please select</option>'); 
      } 
      else { 
       $('#<%=ddlSystemGroup.ClientID %>').empty().append('<option selected="selected" value="0">Loading...</option>'); 
       $.ajax({ 
        type: "POST", 
        url: 'VB.aspx/PopulateSystemGroup', 
        data: '{ComponentGroupID: ' + $('#<%=ddlComponentGroup.ClientID%>').val() + '}', 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(response){ 
        OnSystemGroupPopulated(response); 
        }, 
        failure: function(response) { 
         alert(response.d); 
        } 
       }); 

      } 
     } 

function OnSystemGroupPopulated(response) { 
     alert(response.d); 
      PopulateControl(response.d, $("#<%=ddlSystemGroup.ClientID %>")); 
     } 


function PopulateControl(list, control) { 

      if (list.length > 0) { 
       control.removeAttr("disabled"); 
       alert("here2"); 
       control.empty().append('<option selected="selected" value="0">Please select</option>'); 
       $.each(list, function() { 
        control.append($("<option></option>").val(this['Value']).html(this['Text'])); 
       }); 
      } 
      else { 
       control.empty().append('<option selected="selected" value="0">Not available<option>'); 
      } 
     } 

</script> 

выше, называется, как показано ниже в HTML

<body> 
    <form id="form1" runat="server"> 
    <div> 
    ComponentGroup:<asp:DropDownList ID="ddlComponentGroup" runat="server" AppendDataBoundItems="true" 
       onchange = "PopulateSystemGroup_js();"> 
     <asp:ListItem Text = "Please select" Value = "0"></asp:ListItem>     
    </asp:DropDownList> 
    <br /><br /> 
    SystemGroup:<asp:DropDownList ID="ddlSystemGroup" runat="server"> 
     <asp:ListItem Text = "Please select" Value = "0"></asp:ListItem>     
    </asp:DropDownList> 
    <br /><br /> 
    FailureCod:<asp:DropDownList ID="ddlFailureCode" runat="server"> 
     <asp:ListItem Text = "Please select" Value = "0"></asp:ListItem>     
    </asp:DropDownList> 
    <br /> 
     <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick = "Submit" />     
    </div> 
    </form> 
</body> 

код позади выглядит следующим образом

<System.Web.Services.WebMethod()> _ 
    Public Shared Function PopulateSystemGroup(ByVal ComponentGroupID As Integer) As ArrayList 
     Dim list As ArrayList = New ArrayList 
     Dim strConnString As String = ConfigurationManager.ConnectionStrings("con").ConnectionString 
     Dim strQuery As String = "select SystemGroupDescription SystemGroup,SystemGroupID from FCR_SystemGroup where ComponentGroupID [email protected] Order by SystemGroup" 


     Dim con As SqlConnection = New SqlConnection(strConnString) 
     Dim cmd As SqlCommand = New SqlCommand 
     cmd.CommandType = CommandType.Text 
     cmd.Parameters.AddWithValue("@ComponentGroupID", ComponentGroupID) 
     cmd.CommandText = strQuery 
     cmd.Connection = con 
     con.Open() 
     Dim sdr As SqlDataReader = cmd.ExecuteReader 
     While sdr.Read 
      list.Add(New ListItem(sdr("SystemGroup").ToString, sdr("SystemGroupID").ToString)) 
     End While 
     con.Close() 
     Return list 
    End Function 

Выше функции стреляет, и данные загружены в указанном выше ArrayList , но когда он возвращается на передний конец, его не заполняет данные в выпадающем списке. Предупреждение (response.d) в OnSystemGroupPopulated возвращает неопределенный. В чем может быть проблема?

ответ

0

Я предлагаю вам де следующий с клиентом один: 1) Убедитесь, что ваш код VB возвращает объект JSON (ваша сторона клиента функция сматривая один) 2) Debug вам Javascript функции перед отправкой данных (с Chrome Например, инструменты разработчика) 2) Попробуйте проанализировать «ответ» на json на успех (var response = JSON.parse (response)), тогда вы сможете получить доступ к нему в качестве объекта json (response.d).

Надеюсь, это поможет! (извините за мой английский)

+0

Спасибо MRodriguez, позвольте мне попробовать это ... – user3111059

+0

попробовал ответ уаг = JSON.parse (ответ), но такая же ошибка .. – user3111059

0

Я рекомендую использовать Json.NET, чтобы преобразовать ваш ответ в Json, так как ваш ArrayList не имеет большого смысла при возврате клиенту. http://james.newtonking.com/json

Imports Newtonsoft.Json.Linq 

Пример кода:

Dim list As New ArrayList() 
list.Add("foo") 

Return JArray.FromObject(list) 
+0

Thansk для предложение, я загрузил Newtonsoft.Json.Linq, но все равно та же проблема произошла .. – user3111059

+0

Вы отлаживали оба конца? 'JArray.FromObject (list)' не является нулевым на стороне сервера, а 'response' действительно имеет значение null на стороне клиента? Посмотрите на весь объект ответа, а не на 'response.d' –

+0

JArray.FromObject (list) is returnbing null .. – user3111059

Смежные вопросы