2012-04-03 12 views
0

Ich habe eine Listbox, die ich mit jquery/ajax aktualisieren möchte, um eine Webmethode von einem Code hinter der Seite aufzurufen. Die Listbox zeigt alle angemeldeten Benutzer an (sie werden bei erfolgreicher Anmeldung zu einer globalen Liste hinzugefügt). Ich kann offensichtlich die Listbox aktualisieren, wenn ich vollständige Seitenaktualisierungen verwende, aber das ist nicht ästhetisch ansprechend. Ich habe zwei Probleme.Verwenden von jquery/ajax/webmethod zum Aktualisieren einer Listbox

  1. wenn ich die app in chrome, und überprüfen netzwerkaktivität über dev-tools, ich kann nicht sehen, die webmethode aufgerufen wird. Ich habe andere Webmethoden, die (wie ich sehen kann) wie erwartet gefeuert/ausgeführt werden.

  2. Ich schrieb das Skript basierend auf einem Beispiel, das ich gefunden habe, also bin ich nicht ganz sicher (ich bin relativ neu in diesen Bereichen), wenn ich (a) die Daten von der Liste richtig bekomme (ich will nur der Benutzername, der angezeigt werden soll) und (b) es korrekt an die Listbox anhängen.

hier ist der Webmethod:

[WebMethod()] 
    public static string[] getCurrentList() 
    { 
     int count = 0; 
     for(int i = 0; i < Global.ListUsers.Count(); i++) 
      count++; 

     string[] results = new string[count]; 

     for (int i = 0; i < count; i++) 
     { 
      results[i] = Global.ListUsers[i].Username.ToString();**//edited...** 
     }            

     return results; 
    } 

und das Skript:

$(function updateListbox() { 
var lBox = $('select[id$=ListBox1]'); 
setInterval(function() { 
    $.ajax({ 
     beforeSend: function (req) { 
      req.setRequestHeader("Accept", "application/json"); 
     }, 
     type: "POST", 
     url: "Homepage.aspx/getCurrentList", 
     data: "json=" + JSON.stringify(data), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      var results = data.d; 
      if (results.length > 0) { 
       var updatedList = []; 
       for (var i in results) { 
        updatedList.push(results[i]); 
       } 
       $(lBox).append(updatedList.join('\n')); 
      } 
      else alert("No new items to update..."); 
     } 
    }); 
}, 5000); 

});

alle Hilfe und Anregungen willkommen und geschätzt

Antwort

0

Sie wollen nichts in dem Datenfeld, wenn Sie Parameter in der Funktion sind vorbei. Lass das Feld einfach raus und es sollte gut funktionieren.

Ich habe auch nie den Parameter vor dem Senden verwenden müssen, aber Ihr Szenario kann etwas anders sein.

+0

danke für das Aufräumen, ich wusste nicht wirklich, wofür das Datenfeld war. Der Grund, warum ich das im Datenfeld habe, ist, weil ich einen Server 500 Fehler von den Entwicklertools in Chrome bekommen habe, und nach einer Suche, das war eine Lösung die ich gefunden habe - es hat den Fehler gestoppt, aber ich kann das nicht sehen webmethod wird wie oben angegeben aufgerufen. Ich habe eine andere webmethod queryInvitedBy, die ich sehe, wie alle 5 Sekunden (wie erwartet) aufgerufen wird, so bin ich ratlos, warum ich nicht sehen kann getCurrentList aufgerufen werden. – MattSull

+0

Ich nahm, was im Datenfeld ist; Ich kann das webmethod jetzt schießen sehen, aber ich bekomme diesen Fehler wieder: "500 interner Serverfehler". Wenn ich in die Vorschau/Antwort auf die Anfrage schaue, sehe ich: "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt". – MattSull

+0

Durchlaufen Sie Ihren C# -Code, um genau zu sehen, was die Ausnahme auslöst. Ihre erste for-Schleife fehlt Klammern ... – servarevitas3

0

Aktuell scheint das Problem AJAX Call-Eigenschaft Daten zu sein. Bitte ändern Daten Eigenschaft wie folgt:

data: "{}", 

Keine Notwendigkeit, alle Parameter senden („json =“ + JSON.stringify (Daten) Ihre Web-Methode enthält keine Parameter.). Auch nach servarevitas Antwort, vor dem Senden Parameter ist nicht erforderlich, der Ajax-Aufruf bereits den Inhaltstyp als Json angegeben.