2013-05-21 2 views
0

Я ищу для создания страницы с набором кнопок. Эти кнопки привязаны к различным функциям php (вещи, выполняемые этими функциями, должны выполняться на стороне сервера). В принципе, все кодирование выполняется в php. Php имеет все объекты, константы, всю информацию, необходимую на странице. Но все действия должны быть инициированы пользователем, нажав кнопки.Написание интерактивного PHP с кнопками

Но здесь возникает проблема: как я могу эффективно смешивать эти функции php с моими кнопками? Сейчас я использую Ajax, JavaScript и JQuery, но так, как я это чувствует спорным, вот что я имею в виду:

var continueFight; 
$("#playerAttack").click(function() { 
    if (continueFight) {  
     AJAX actions here 
    } 

один из Аякса действий является $.post, направленный на следующую страницу:

<?php 
//some fight calculations 
if ($fightOver) 
    echo "<script>continueFight=false</script>"; 
?> 

В приведенном выше примере сделаны некоторые вычисления php, чтобы решить, закончился ли бой, и если это так, он перекликается с некоторым Javascript и возвращает его (через запрос AJAX) на главную страницу, что приведет к тому, что кнопка перестаньте работать в будущем.

Это кажется очень грязным. Есть ли лучший способ смешать PHP с кнопками?

+0

Если вы хотите взаимодействовать с сервером с помощью кнопки клиента, нет другого способа, кроме как отправить запрос (было ли это с помощью ajax или простой ссылки html). Но ваш вопрос довольно широк для SO ... –

ответ

2

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

Все действия вашей игры должны обрабатываться на стороне клиента. Под этим я подразумеваю слушателей, которые отправляют запросы на php через ajax. PHP должен ТОЛЬКО возвращать ответы состояния для интерпретации с помощью js, он НЕ должен возвращать html или что-то подобное.

Вы можете добавить положения на свой php для проверки состояния серверной части, чтобы предотвратить манипуляции с js, но это, вероятно, не является большой проблемой для вас на данный момент.

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

EDIT

Государственные ответы были бы что-то как объект, целое число, чтобы представить логическое, целочисленное диапазон, оценка, или что-нибудь еще использовать как простой ответ, чтобы вызвать более сложное действие в JavaScript. Итак, предположим, что у вас есть атака. Предположим, вы отправили запрос на PHP, чтобы он решил, была ли атака успешной, и если да, то какой ущерб он нанес. Можно было бы ожидать, чтобы получить ответ, как это от PHP:

$response = array(
    'success' => 1, 
    'damage' => 200, 
    'enemy_id' => 4 
); 

echo json_encode($response); 

из JavaScript, предполагающей ваш успех Ajax JQuery был присваивая ответ data вы могли бы оценить реакцию, как это:

//assume generically that this object represents the damagable players 
var players = { 
    0: { 
     health: 200 
    }, 
    1: { 
     health: 300 
    }, 
    2: { 
     health: 30 
    }, 
    3: { 
     health: 750 
    }, 
    4: { 
     health: 10 
    } 
}; 

// and assume this is in your success function in your ajax call 
if(data.success == 1) 
{ 
    //successful attack. cause damage 
    players[data.enemy_id].health -= data.damage; 
    if(players[data.enemy_id].health <= 0) 
    { 
     // do something to kill enemy 
    } 
} 

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

+0

Не могли бы вы объяснить, что вы подразумеваете под ответами государства? – frrlod

+0

Я разместил обновление. надеюсь, что это имеет смысл –

+0

Я уже вижу, как это может быть полезно, спасибо! Я должен прочитать руководства JSON, чтобы получить более глубокое понимание этого. – frrlod

3

Я не понимаю, почему эхо элемента скрипта. Только эхо значение (например, 1 или ничего), и от успеха обратного вызова действовать в соответствии с ответом:

<?php 
//some fight calculations 
echo $fightOver; 
?> 
var continueFight; 
$("#playerAttack").click(function() { 
    if (continueFight) {  
     $.post(url, {}, function(response) { 
      continueFight = !!response; // cast response to boolean 
     } 
    } 
}) 
+0

Что делать, если ответ добавляется в элемент для просмотра пользователем? Разве они не увидят значение, которое я повторил ($ fightOver)? – frrlod

+0

Если вы хотите отвечать смешанным контентом (HTML и скриптом), вы можете упаковать все как JSON, а затем обрабатывать каждую часть отдельно от обратного вызова ответа. – bfavaretto

1

Не эхо куски JavaScript обратно на страницу. Написать JavaScript в JavaScript, и передать флаг обратно из PHP сказать S, что делать:

JavaScript:

var continueFight; 
$("#playerAttack").click(function() { 
    if (continueFight) {  
     $.post('scriptname.php', function(data) { 
      continueFight = data.continueFight; 
     }); 
    } 
}); 

PHP:

<?php 

//some fight calculations 

echo json_encode(array('continueFight' => !$fightOver)); 

Это так же просто, как он получает. К сожалению, Ajax требует много печатания.

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