Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] problem ze skryptem
Forum PHP.pl > Forum > XML, AJAX > AJAX
matino
Witam wszystkich,

Mam mały problem ze skryptem, męczę się żeby znaleźć gdzie jest błąd, ale sam do tego nie dojdę sad.gif

Generalnie strona wygląda tak - jest sobie tabela z rekordami i checkboxami (każdy rekord ma 1 checkbox), zaznaczam sobie checkboxy jakie chcę, naciskam guzik i w zaznaczonych rzędach tabeli ma się zmienić jeden parametr z "No" na "Yes". Skrypt Ajax wygląda tak:

Kod
     function action() {
                 var rows = document.getElementById("body1").rows.length - 1;
                 var params = "", label, checkBox;
    
                 for (var i = 1; i <= rows; i++) {
                     checkBox = document.getElementById("check" + i);
                     label = document.getElementById(i);
                     if (checkBox.checked == true) {
                         params = params + "sn" + i + "=" + label.innerHTML;
                         if (i + 1 <= rows)
                             params = params + "&";
                     }
                 }
                 var httpObject = getHTTPObject();
                 if (httpObject != null) {
                     httpObject.open("POST", "RSMaccept.php", false);
                     httpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                     httpObject.setRequestHeader("Content-length", params.length);
                     alert (params);
                     httpObject.setRequestHeader("Connection","close");
                     httpObject.send(params);
                     httpObject.onreadystatechange = function setUpdate(){
                         if (httpObject.readyState == 4)
                             alert (httpObject.responseText);
                         else
                             alert ("Error");
                     };
                 }
                 window.location.reload(true);
             }

Generalnie problem jest taki, że gdy zaznaczam np. 3 rzędy w tabeli i naciskam guzik, to wartość zmienia się tylko w 2óch. Co ciekawe w 3cim (nie jest to nigdy ten sam rekord - próbowałem parę razy) wartość zmienia się na początku na taką jaką chcę, ale w bazie danych się nie zmienia i po odświeżeniu jej w phpmyadminie i poźniejszym odświeżeniu mojej strony, wartość wraca z powrotem na "No".
Nie wiem czy to może być powiązane, ale alerty w sekcji onreadystatechange nie wywołują się nigdy.
Natomiast
Kod
alert (params);

zawsze pokazuje dobrze, czyli dane są jednak przekazywane do skryptu php, który wygląda tak:
Kod
<?php
include('db.php');
while(list($key, $value) = each($HTTP_POST_VARS)) {
     $query = "UPDATE escalations SET reviewed = 'Yes' WHERE sn = '$value'";
     $result = mysql_query($query) or die(mysql_error());
     echo "success ";
}
?>


Jeśli ktoś móglby mnie oświecić co tu może być źle, to byłbym niemiłosiernie wdzięczny.
vokiel
Ciężko samemu testować, ale może ilość iteracji jest mniejsza niż wierszy przez:
rows.length - 1;
Poza tym możesz sobie zrobić mini-debuggera: po istotnych funkcjach rób sobie zrzut danych, i np wyświetlaj przez console.log(), to w ff zobaczysz co się zmieniło i ile razy. Np:
  1. <?php
  2. function action() {
  3.                 var rows = document.getElementById("body1").rows.length - 1;
  4. console.log('rows: '+rows);
  5.                 var params = "", label, checkBox;
  6.    
  7.                 for (var i = 1; i <= rows; i++) {
  8. console.log('Iteracja: : '+i);
  9.                     checkBox = document.getElementById("check" + i);
  10.                     label = document.getElementById(i);
  11.                     if (checkBox.checked == true) {
  12. console.log('CheckBox checked == true');
  13.                         params = params + "sn" + i + "=" + label.innerHTML;
  14.                         if (i + 1 <= rows)
  15.                             params = params + "&";
  16.                     }
  17.                 }
  18. console.log('Params: '+params);
  19.                 var httpObject = getHTTPObject();
  20.                 if (httpObject != null) {
  21.                     httpObject.open("POST", "RSMaccept.php", false);
  22.                     httpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  23.                     httpObject.setRequestHeader("Content-length", params.length);
  24.                     alert (params);
  25.                     httpObject.setRequestHeader("Connection","close");
  26.                     httpObject.send(params);
  27.                     httpObject.onreadystatechange = function setUpdate(){
  28.                         if (httpObject.readyState == 4)
  29.                             alert (httpObject.responseText);
  30.                         else
  31.                             alert ("Error");
  32.                     };
  33.                 }
  34.                 window.location.reload(true);
  35.             }
  36. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.