Не могу получить Ajax работает - PullRequest
0 голосов
/ 06 июля 2010

У меня проблема с Ajax. Я совершенно нуб с Ajax, и я прошу прощения за такой глупый вопрос.

У меня есть список элементов (загруженных БД), которыми я хочу управлять, т.е. удалить, изменить их имя ..; Я хочу использовать ajax для изменения БД и списка.

Но я хочу, чтобы страница изменялась только ПОСЛЕ изменения БД. Я могу изменить страницу до того, как БД будет изменена, но это не то, что я хочу.

Это мой код:

function setXMLHttpRequest() {
   var xhr = null;
   if (window.XMLHttpRequest) {
     xhr = new XMLHttpRequest();
   }
   else if (window.ActiveXObject) {
     xhr = new ActiveXObject("Microsoft.XMLHTTP");
   }
   return xhr;
 }

function modifyCat(n,newN){
    xhrObj = setXMLHttpRequest();
    var url = "modifyCat.php?action=modify&cat="+n+"&newCat="+newN;
    xhrObj.open("GET", url, true);
    links = document.getElementById("cat").getElementsByTagName("a");
    updatePage(links);
    xhrObj.send(null);
}

function updatePage(links) {
     if (xhrObj.readyState == 4) {
         var risp = xhrObj.responseText;
                     //code that works... if not put inside this if!
     }  
     xhrObj.send(null);
}

ModifyCat.php is

//...
else if($action='modify'){
    $n = cleanSimpleString($_GET['cat']);
    $nN = cleanSimpleString($_GET['newCat']);
    $qry = "UPDATE Categorie Set Nome='$nN' WHERE Nome='$n'";
    $check = mysql_query($qry) or $db=0; 
}

Как я понимаю if (xhrObj.readyState == 4) должен действительно хотеть, я спрашиваю. Вместо этого с тем, что ничего не происходит (на странице, php правильно загружен). Без этого Если страница правильно перезагружена, но пока работает БД ..

редактировать.

Я хотел бы сделать это без рамок, я думаю, что это простая вещь, которую можно решить просто.

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 июля 2010

Вы можете использовать XMLHttpRequest для выполнения синхронного или асинхронного запроса. Синхронный запрос легче программировать, но он заблокирует вашу страницу, пока результат не станет доступным. Асинхронный запрос выполнит функцию обратного вызова, когда результат станет доступным. Существует ряд событий, для которых будет выполнен обратный вызов, readyState = 4 означает, что результат доступен, см. Также:

http://en.wikipedia.org/wiki/XMLHttpRequest#The_onreadystatechange_event_listener

(и, конечно, остальная часть этой статьи)

Сказав это, примите предложения в другом месте, гораздо проще (и более совместимым с браузерами) использовать jquery (или аналогичную библиотеку javascript / ajax) для этой работы.

1 голос
/ 06 июля 2010

Если вы «абсолютно не любите Ajax», я бы порекомендовал использовать библиотеку Ajax, такую ​​как jQuery.Взгляните на их страницу Ajax , и вы увидите, что это гораздо проще, чем работать напрямую с объектами XHR.

Кроме того, у вас есть опечатка - вы 'мы используем hrObj в modifyCat.

0 голосов
/ 06 июля 2010

Если бы вы просто использовали jquery, это избавило бы вас от головной боли - это может быть так же просто, как сделать это:

$.get("modifyCat.php", { action: "modify", cat: n, newCat: newN },
   function(data){
     alert("Data Loaded: " + data);
   });

http://api.jquery.com/jQuery.get/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...