Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с Ajax.
 
 автор: fiper   (12.12.2009 в 21:20)   письмо автору
 
 

Доброго времени суток.

Проблема с Ajax.

Есть javascript, который обрабатывает все выбранные чебкоксы. А затем его значение с помощью цикла отправляет в php. Не могу никак понять, как можно на лету получать результат php скрипта, которому отправляется значение чекбоксов. В алерте окна выводится всего один результат, а именно последнего выбранного чекбокса. Нужно выводить именно по очереди, а не все заключённые в массив значения чекбокса.


В переменной http содержится созданный XMLHttpRequest, поэтому не вижу смысла писать его код.


Javascript код

function parser(str){

// В переменной str содержится массив значений чекбоксов

    for (i = 0; i < str.length; i++) {

        if(str[i].checked == true ){

            if(str[i].value !='' ){

                var url='/test.php?check='+str[i].value+'&test=true'+"&rand="+Math.random();

                http.open('GET', url ,true);

                http.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");

                http.onreadystatechange = parser_otvet(http);

                http.send(null);


                }

        } 



    }



    }


function parser_otvet(http) {

    if(http.readyState == 4){

        var response = http.responseText;

        alert(response); 

    } 
    

}



Php код test.php

<?php

echo $_GET['check'];

?>

  Ответить  
 
 автор: fiper   (13.12.2009 в 00:18)   письмо автору
 
   для: fiper   (12.12.2009 в 21:20)
 

Проблему решил с помощью функции setTimeout , между обращениями к циклу.

  Ответить  
 
 автор: sl1p   (13.12.2009 в 02:01)   письмо автору
 
   для: fiper   (13.12.2009 в 00:18)
 

фу зачем цикл при отправке запросов? ужос..
не легче отправить массив?

  Ответить  
 
 автор: sl1p   (13.12.2009 в 02:05)   письмо автору
 
   для: fiper   (12.12.2009 в 21:20)
 

function parser(str){ 

// В переменной str содержится массив значений чекбоксов 
    var vals = [];
    for (i = 0; i < str.length; i++)
        if(str[i].checked == true )
            if(str[i].value !='' )
                vals.push(str[i].value);

    if(vals) {
        var url='/test.php?check='+vals.join(":")+'&test=true'+"&rand="+Math.random(); 

        http.open('GET', url ,true); 

        http.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 

        http.onreadystatechange = parser_otvet(http); 

        http.send(null); 
    }

}

<?
$vals 
explode(":"$_GET['check']);
print_r($vals);

  Ответить  
 
 автор: fiper   (13.12.2009 в 13:23)   письмо автору
 
   для: sl1p   (13.12.2009 в 02:05)
 

Я же написал, что не проще, или вы не читали первый пост? Php скрипт который имеется очень большой с php+ mysql , может выполняться от 1 до 10 минут, для каждого значения чекбокса. Нужно получать результат сразу после прохождения одного значения в цикле , а если отправить массив, то ждать придётся фиг знает сколько времени для получения результата.

Я думаю вы поняли? Прошли одно значение например 1, выводим результат php скрипта в <div> и т.д, до получения полного результата.Проблему решил.

  Ответить  
 
 автор: sl1p   (13.12.2009 в 13:48)   письмо автору
 
   для: fiper   (13.12.2009 в 13:23)
 

ну да, но мне кажется это больно:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования