2012-04-09 18 views
0

Ich habe eine Website, die eine Benutzerdaten bei der Anmeldung erhält. Diese Daten werden von MySQL als Zeichenfolge gespeichert, und nach dem Aufrufen dieser Zeichenfolge mit AJAX, teile ich die Daten von Js-Funktion: str.split (). Dies gibt ein Array mit allen IDs der Btns zurück, die ich überprüfen möchte, und mit dem ".each" -Aufruf überprüfe ich alle übereinstimmenden Btns. das große Problem ist, dass dieser Prozess etwa 10 Sekunden auf dem lokalen Server dauert. gibt es einen besseren und schnelleren Weg, um Benutzerdaten zu erhalten? S.: Wir sprechen über Hunderte von Btns bei der Benutzeranmeldung.Javascript-Daten verwalten

hier ist der Code:

function get_saved_list(){ 
    $.ajax({ 
     type: "post", 
     url: "ajax/get_saved_list.php", 
     success: function(data){ 
      list=data.split(";"); 
      for(j=0; j<list.length-1; j++){ 
       $(".content #"+list[j]).siblings('a').trigger('click'); 
      } 
      setTimeout("$('#save').hide()", 1); 
     } 
    });  
} 

einige der html umfassen das 'a', das ausgelöst wird:

<ul class="content"><li> 
<a class="third_cat_chb cat_chb_off"></a><span>page</span> 
             <button id="page_<?php echo $row['page']."Z"; ?>chapter_<?php echo $row['s_id'];?>" style="width: 20px; margin-right: 5px;" class="page_chooser"></button></li></ul> 

sory für das schlechte Format:)

+4

_hunderte von btns auf user login_ ... meinst du das ernst? – jrummell

+0

Haben Sie mehrere Tasten mit der gleichen ID? Wo werden die 10 Sekunden verbracht? wartet es auf den Ajax? oder die Überprüfung der Tasten? Kannst du bitte ein Beispiel des HTML einbeziehen? – Patricia

+0

Wie viel von dieser Zeit ist der Ajax-Download und wie viel davon ist die Schleife durch die IDs? – Jordan

Antwort

2

Do not Setzen Sie Ihren ID-Selektor mit einer Klasse voran. Dies verhindert, dass jQuery die native getElementById() verwendet, und stattdessen getElementsByClassName(), was langsamer ist. Statt

diesen Selektor Versuchen: $("#"+list[j])

ich in der Lage war durch 1000 Elemente in einer Schleife und löst einen Klick in etwa 1 Sekunde, anstatt 4-5 Sekunden durch eine Klasse zuerst tun.

Es würde auch helfen, wenn Sie eine ID auf die tatsächliche <a> setzen könnten, die Sie klicken möchten, so dass Sie den Aufruf von Geschwister() vermeiden können, die zusätzlichen Overhead hinzufügt.

0

Wenn Sie die Kontrolle über den Server haben, würde es sehr viel Zeit sparen, das checked="true" html-Attribut zu verwenden, indem Sie es in php einstellen, anstatt ein Klickereignis auszulösen.

Wenn Sie mit Javascript stecken: Ich bin mir nicht sicher, aber es könnte auch schneller sein, die Eigenschaft checked als klicken, da Sie dann nicht auch ein "Klick" -Ereignis auslösen würde.

$("#"+list[j]).siblings('a').attr('checked'); 

sollte funktionieren, obwohl ich es nicht getestet habe.

Wirklich obwohl, wenn Sie können, setzen Sie es auf dem Server ist der Weg zu gehen.

+0

Es ist ein Link. Warum sollte es ein geprüftes Attribut haben? – Jordan

+0

Wow, ich habe den Code total falsch gelesen, nachdem ich das Wort "check" zwanzigmal in der Frage gelesen hatte und dachte, dass er einige Checkboxen überprüfen wollte. Warum sollte jemand programmatisch auf Hunderte von Links klicken? Ich werde diese Antwort wahrscheinlich löschen. – quodlibetor

+0

Ich klicke auf Hunderte von Btns, weil jeder Klick viele Daten auf der Seite ändern würde. Jeder btn muss angeklickt werden und jeder checked btn würde die anderen btns beeinflussen, ja, es gibt einen Grund für diese Klicks! – Tarek