JQuery Ajax приносит ответы по мере их создания - PullRequest
2 голосов
/ 24 июля 2010

Я отправляю пост-запрос в php-файл, который выполняет запрос MySQL и выполняет итерацию ответов.Во время итерации он выводит строку, которую я хочу выводить в jquery один за другим для каждой итерации.

Так что для каждого эха я хотел бы получить одно успешное значение, чтобы пользователю не приходилось ждать завершения всех итераций.

Класс compSelect является элементом выбора.

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

Сейчас сообщение об успехе выглядит как name1name2name3

Я бы хотел, чтобы каждое сообщение было отдельным именем.

JavaScript

$.ajax({
               type: "POST",
               cache: false,
               url: "class.GetMiscInfo.php",
               data: "getNames=1&name=Jack",
               dataType: "html",
               success: function(msg) {

                    $('.compSelect').append("<option value='" + msg +"'>" + msg +"</option>");

               } 
            });

PHP / MySql

class GetMiscInfo
    {        
        public static function getNames($name)
        {
            $res = mysql_query("SELECT names.name FROM names WHERE names.name='$name'");

            while($row = mysql_fetch_assoc($res))
            {
                echo $row['name'];
            }
        }       
    }

    if(isset($_REQUEST['getNames']))
        GetMiscInfo::getNames($_REQUEST['name']);

Я знаю, что могу разделить их строкой вроде ~, а затем просто разделить ответы, но дляБолее сложные запросы мне бы не хотелось ждать.

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

Ответы [ 2 ]

2 голосов
/ 24 июля 2010

Вы запрашиваете потоковую передачу данных с сервера.Это не тот способ, которым JQuery разрабатывает, это методы AJAX.Это не так, как большинство из них.

С учетом сказанного, то, что вы делаете, довольно тривиально с точки зрения данных.Я думаю, что потоковая передача была бы излишней.Я бы предложил, чтобы PHP-скрипт возвращал JSON и изменил ваш код jQuery на использование getJSON.

Проверьте PHP JSON-функции и JQuery-методы JSON .

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

Вместо того, чтобы выводить каждое имя на каждой итерации, сохраните их в массиве:

$data = array('names' => array());
while($row = mysql_fetch_assoc($res))
{
    $data['names'][] = $row['name'];
}

// Once the loop has completed, `json_encode` the array and send it to the client
// optionally, set an 'error' offset if there is no data, or something bad happened
if(empty($data['names'])) {
    $data['error'] = 'No data to return';
}
echo json_encode($data);

Обработайте его на клиенте так:

$.ajax({
   type: "POST",
   dataType: "json", // the data we are expecting is JSON
   cache: false,
   url: "class.GetMiscInfo.php",
   data: "getNames=1&name=Jack",
   success: function(json) {
       if(json.error) {
           alert('error: ' + json.error);
       }
       $.each(json.name, function(Index, val) {
          $('.compSelect').append("<option value='" + val +"'>" + val +"</option>");
       });
   } 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...