J'essaie de passer des valeurs de formulaire PHP dans une fonction JS à l'aide de mon code suivant - pour obtenir quelque chose comme ça - p> mrp_data_callbacks.push( function(index, data) {
data["<?php echo "htitle-" . $sequence ?>"] = "<?php echo $htitle ?>";
return data;
});
4 Réponses :
Ce serait fait avec Ajax ou Websocket, avec jQuery, vous pouvez avoir quelque chose comme:
JS: strong> p> Utilisation de jQuery vous donne des fonctions telles que Toutefois, si vous attendez un grand nombre d'utilisateurs travaillant sur les mêmes données avec des formulaires et que vous continuez à rebondir des données et retour à tous les utilisateurs qui vont Mettez beaucoup de charge sur le serveur. P> sur l'autre côté Web Websocket fonctionne en ouvrant un canal de connexion entre le serveur et les utilisateurs, ce canal de connexion reste ouvert jusqu'à ce que l'utilisateur déconnecté, cela ne fait pas beaucoup de chargement sur le Serveur, je n'ai pas encore travaillé avec Websocket, mais j'ai lu des articles en couple et j'ai regardé peu de vidéos sur YouTube, que la plupart d'entre elles portaient sur la création d'applications de discussion en temps réel ou de jeux Web multi-utilisateurs. P> pour php Il y a Ce php-Webskets , et ceci bibliothèque à cliquet , également ce WebSockets La manière UNIX qui n'est pas pour PHP uniquement. P> update 1: strong>
Sur un commentaire de l'OP, supposons que nous ayons une situation similaire - mais plus simple em>, ayant les fichiers suivants tous les mêmes dossiers: p> data.txt: strong> - est juste utilisé à la place de la base de données pour la démonstration em> p>
JS strong> p>
html: strong> p>
$. Ajax () code>
, $ .post () code>
, $. Obtenez () code>
, ces deux fonctions sont des raccourcis. P>
<?php
if(isset($_POST['index']) && isset($_POST['title']) && isset($_POST['comment'])){
// if there's a POST request, we retrieve the data.txt content as an array
// depending on the POST index value we change the corresponding item in
// the array to update title and comment values, then write the array as
// new content of the data.txt with the new array $foo.
$index = $_POST['index'];
$title = $_POST['title'];
$comment = $_POST['comment'];
//Do validation and sanitizing here
$temp = '';
$foo = getContent();
$foo[$index]['title'] = $title;
$foo[$index]['comment'] = $comment;
for($i = 0; $i < count($foo); $i++) {
$temp .= $foo[$i]['title'] . ' , ' . $foo[$i]['comment'] . "\n";
}
$temp = trim($temp);
file_put_contents('data.txt', $temp);
}else{
// if no POST request, no changes happened and our array is same as file content
$foo = getContent();
}
// we encode $foo as JSON and echo it back to javascript
$jsonFoo = json_encode($foo);
echo $jsonFoo;
// getting data.txt content and return an array of the content
function getContent(){
$bar = array();
$data = file_get_contents('data.txt');
$rows = explode("\n", $data);
foreach ($rows as $row) {
$cols = explode(",", $row);
$title = trim($cols[0]);
$comment = trim($cols[1]);
$bar[] = array('title' => $title, 'comment' => $comment);
}
return $bar;
}
<!-- this is usually generated with PHP -->
<div id="output">
<label for="mrp-title-0">Title #0:</label>
<input type="text" id="mrp-title-0" class="titles" value="">
<label for="comment-0">Comment #0:</label>
<input type="text" id="comment-0" class="comments" value="">
<button id="btn-0" class="buttons">Save Changes</button>
<hr>
<label for="mrp-title-1">Title #1:</label>
<input type="text" id="mrp-title-1" class="titles" value="">
<label for="comment-1">Comment #1:</label>
<input type="text" id="comment-1" class="comments" value="">
<button id="btn-1" class="buttons">Save Changes</button>
<hr>
<label for="mrp-title-2">Title #2:</label>
<input type="text" id="mrp-title-2" class="titles" value="">
<label for="comment-2">Comment #2:</label>
<input type="text" id="comment-2" class="comments" value="">
<button id="btn-2" class="buttons">Save Changes</button>
</div>
$(document).ready(function() {
// for initializing we call fetchData function as soon as DOM is ready
// then re-call it every 10,000 milliseconds to update the input values with new
// fetched data , that could have been changed by other users.
fetchData();
setInterval(fetchData, 10000);
// on any button click we get the numeric index value, using this value
// to pick correspnding title and comment values, then send a POST
// request to foo.php and on response data we call updateHTML
$('.buttons').on('click', function(){
indexV = $(this).attr('id').replace('btn-', '');
titleV = $('#mrp-title-' + indexV).val();
commentV = $('#comment-' + indexV).val();
$.post('foo.php', { index : indexV, title:titleV, comment: commentV}, function(data){
if(data){
updateHTML(data);
}
});
});
// Making a get request to fetch fresh data
function fetchData(){
$.get('foo.php', function(data){
updateHTML(data);
});
}
// Update title and comment inputs values
function updateHTML(data){
var titleID, titleV, commentID, commentV, indexV, content;
// using jQuery parseJSON function to convert the JSON response
// to and array, then loop through this array to update inputs
// with new title and comment values.
content = $.parseJSON(data);
for(var i = 0; i < content.length; i++){
titleID = '#mrp-title-' + i;
titleV = content[i].title,
commentID = '#comment-' + i;
commentV = content[i].comment;
$(titleID).val(titleV);
$(commentID).val(commentV);
}
}
});
title 0 , comment number 0
title 1 , comment number 1
title 2 , comment number 2
Bonjour merci pour la réflexion sur la réponse. Vous ne savez toujours pas comment appliquer cela à ma situation donnée?
Bonjour @ mygm26, je ne sais pas comment vous avez structuré votre HTML ou ce qui est stocké dans votre base de données ou ce qui est écrit dans vos fichiers PHP, je ne sais pas non plus de quoi essayez-vous exactement, tout ce que j'ai vu, c'est que vous poussez Valeurs peuplées avec PHP dans un tableau dans JavaScript, donc je ne peux pas avoir le même environnement exact que vous.
Merci pour votre temps, mais je ne suis toujours pas sûr comment appliquer ceci pour ma situation actuelle. J'ai mis à jour ma question avec plus de code (trouvé dans les liens) pour aider à préciser davantage. Fondamentalement, les fonctions de rappel sont déjà définies dans un autre script. Ma question est donc spécifiquement aux variables et au code mentionnées.
@ Mi-créativité Il vous manque une citation unique de fermeture ( $ (ceci) .Addclass ('errorormsg) code>).
Comme vous l'avez dit correctement, vous obtenez la valeur du champ de saisie uniquement une fois (il définira la valeur pour titlev code> et
commentav code> lors de la première charge de la page) . Donc, si quelque chose est changé sous la forme de l'action de l'utilisateur, il ne sera pas là. Vous devez déplacer la partie du code qui obtient le
titlev code> et
commentav code> à l'intérieur des fonctions de rappel. Donc, il obtiendra toujours la valeur actuelle de l'entrée lorsque la fonction est appelée à la volée. Quelque chose comme ça (un peu amélioré) -
Merci pour la réponse. J'ai essayé votre code mais cela ne semble pas rendu des valeurs lors de la visualisation de mon site à l'aide d'outils de développement. C'est ce que je vois - varèche = "0"; mrp_data_callbacks.push (fonction (index, données) {var titlev = document.getelementByID ("MRP-Title-" + séquence). Données [" HTITLE- "+ Séquence] = Titrev; Données de retour;}); MRP_DATA_CALLBACK.PUSH (fonction (index (index, données) {var commotev = document.getElementByID (" Commentaire- "+ séquence). Données [" Commentaire- "+ séquence] = COMMENTEV; Données de retour;}); code>
Comment utilisez-vous ces fonctions pour la valeur de sortie? Ces fonctions ne renvoient que la valeur, pas la sortie.
Y a-t-il un moyen d'envoyer un message privé? Le site n'est pas encore supposé être public mais je peux vous envoyer le lien afin que vous puissiez voir ce que je veux dire
Je ne pense pas qu'il y ait une telle façon, (même toutes les salles de discussion sont publiques ici). Mais vous pouvez me trouver dans Facebook / Skype avec le même nom et m'envoyer un message.
Avez-vous essayé de générer tout le code JS avec PHP? Cela pourrait fonctionner:
<?php $js = "<script type='text/javascript'>"; $js += "var sequence = " . $sequence . ";"; $js += "mrp_data_callbacks.push(function(index, data) {"; $js += " data[" . $key . "] = " . $value . ";"; $js += " return data;"; $js += "});"; $js += "</script>"; echo $js; ?>
Un peu déroutant mais tout ce que je crois que vous devez faire, c'est d'obtenir les valeurs à l'aide de JavaScript au moment de la publication du formulaire. TAREQ Mahmood est correct.
Donc, donc ceci: p> devrait ressembler à ceci: p> Daniel P > p>
Je suppose que ce n'est qu'une raison pour laquelle tout le monde expose son côté serveur avec des points d'extrémité de l'API reposant ... quelque chose comme Coreymaynard.com/blog/Creatting-A-Resful-api-with-php