Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX] problem ze skryptem
matino
post
Post #1





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

Ostrzeżenie: (0%)
-----


Witam wszystkich,

Mam mały problem ze skryptem, męczę się żeby znaleźć gdzie jest błąd, ale sam do tego nie dojdę (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 03:12