2013-07-15 9 views
1

Я блуждал, если его возможно иметь 2 или более петли/каждый с одним вызовом ajax? То, что я пытаюсь достичь, - это оценочная карта для гольфа, в которой я получаю данные для оценочной карточки и игроков в одном звонке json/ajax ...Несколько циклов с одним запросом ajax jquery

Вот как я получаю оценочную карту.

scorecard.php:

$scorecard = array(); 

$result = mysqli_query($con,"SELECT * FROM ga_turndata WHERE fk_turnid = 1 ORDER BY hole_no ASC LIMIT 18"); 
while($row = mysqli_fetch_array($result)){ 
    $scorecard[] = array('hole' => $row['hole_no'], 'par' => $row['par'], 'hcp' => $row['hcp']); 
} 

JQuery, чтобы получить данные:

$.getJSON('http://mypage.com/json/scorecard.php', function(data) { 

     var array = []; 

     $.each(data, function (i, val) { 

      array.push($("#theholes").append("<li>"+val.hole+"</li>")); 

     }); 
}); 

Эта часть работает как шарм :-). Но при попытке добавить это к scorecard.php:

$scorecard[] = array('user' => 'Jane Doe', 'id' => '89', 'useraStrokes' => '5'); 
$scorecard[] = array('user' => 'Jemaine Dice', 'id' => '245', 'useraStrokes' => '17'); 
$scorecard[] = array('user' => 'Jimmie Gallon', 'id' => '16', 'useraStrokes' => '13'); 

я тогда от курса, получить 3 Ли больше ... Есть в любом случае я могу отделить их, или я должен сделать вызов AJAX дважды? Один для оценочной карточки и один для игроков?

Надеясь на помощь и заранее спасибо :-)

+0

Вы можете пройти через свой «карточку» и проверить ключ (отверстие или пользователь)? – Pieter

ответ

1

Верните один объект JSON, содержащий два массива: scorecard и players. Затем, в вашем успехе обратного вызова AJAX, вы бы просто перебирать их по отдельности:

$.getJSON('http://mypage.com/json/scorecard.php', function(data) { 
    var array = []; 
    $.each(data.scorecard, function (i, val) { 
     array.push($("#theholes").append("<li>"+val.hole+"</li>")); 
    }); 

    $.each(data.players, function(i, player) { 
     // do something with this player 
    }); 
}); 

РНР сторона будет выглядеть примерно так:

$scorecard = array(); 

$result = mysqli_query($con,"SELECT * FROM ga_turndata WHERE fk_turnid = 1 ORDER BY hole_no ASC LIMIT 18"); 
while($row = mysqli_fetch_array($result)){ 
    $scorecard[] = array('hole' => $row['hole_no'], 'par' => $row['par'], 'hcp' => $row['hcp']); 
} 

$players = array(); 

$players[] = array('user' => 'Jane Doe', 'id' => '89', 'useraStrokes' => '5'); 
$players[] = array('user' => 'Jemaine Dice', 'id' => '245', 'useraStrokes' => '17'); 
$players[] = array('user' => 'Jimmie Gallon', 'id' => '16', 'useraStrokes' => '13'); 

$data = array('scorecard' => $scorecard, 'players' => $players); 

// possibly some other stuff? 

return json_encode($data); 

Отказ от ответственности: Я никогда не узнал PHP, это только основывается на грубом знании, полученном от чтения на SO; извинения за любые ошибки выше.

+0

Как выглядит PHP-часть? – Mansa

+0

@ Mansa Я никогда не изучал PHP, кроме того, что я понял, прочитав вопросы и ответы на SO. Я мог бы нанести удар (хотя, вероятно, будут некоторые незначительные ошибки), но вы уже продемонстрировали все необходимые знания в своем вопросе; вы просто применяете те же самые понятия. –

0

самый простой способ, но не самый лучший в цикле дважды

$.getJSON('http://mypage.com/json/scorecard.php', function(data) { 

     var array = []; 

     $.each(data, function (i, val) { 

      array.push($("#theholes").append("<li>"+val.hole+"</li>")); 

     }); 
    $.each(data, function (j, val) { 

      array.push($("#scorecard").append("<li>"+val.user+"</li>")); 

     }); 
}); 

Лучший способ проверить, если val.user или val.hole существовать, если yes build li и сохранить его в переменной и только после цикла do append

0

Один из способов - вернуть ваш вызов ajax со значениями в соответствующем массиве, например $ data ['scorecards' => $ scorecards, 'users' => $ пользователи] и т. д.

В jquery просто получите оценочные карточки и пользователи из data.scorecards и data.users соответственно.

Это позволяет избежать двойного вызова ajax.

+0

Не знаете, что вы имеете в виду ... Где я использую $ data? – Mansa

Смежные вопросы