2010-07-24 3 views
2

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

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

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

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

Сейчас тзд на успех выглядит 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>"); 

       } 
      }); 

РНР/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, чтобы получить то, что я хочу.

ответ

1

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

$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); 

Handle его на клиенте, как это:

$.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>"); 
     }); 
    } 
}); 
2

Что вы запрашиваете, это потоковая передача данных с сервера. Это не так, как архитекторы jQuery - это методы AJAX. Это не так, как обычно.

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

Проверьте PHP JSON functions и jQuery's JSON methods.