2009-01-02 6 views
10

Comment puis-je avoir un script Javascript demandant une page PHP et lui transmettre des données? Comment puis-je faire en sorte que le script PHP renvoie les données au script Javascript?Comment passer des données de Javascript à PHP et vice versa?

Client.js:

data = {tohex: 4919, sum: [1, 3, 5]}; 
// how would this script pass data to server.php and access the response? 

server.php:

$tohex = ... ; // How would this be set to data.tohex? 
$sum = ...; // How would this be set to data.sum? 
// How would this be sent to client.js? 
array(base_convert($tohex, 16), array_sum($sum)) 

Répondre

17

Passage de données à partir de PHP est facile, vous pouvez générer JavaScript avec. L'inverse est un peu plus difficile - vous devez invoquer le script PHP par une requête Javascript.

Un exemple (en utilisant le modèle d'enregistrement d'événement traditionnel pour simplifier):

<!-- headers etc. omitted --> 
<script> 
function callPHP(params) { 
    var httpc = new XMLHttpRequest(); // simplified for clarity 
    var url = "get_data.php"; 
    httpc.open("POST", url, true); // sending as POST 

    httpc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    httpc.setRequestHeader("Content-Length", params.length); // POST request MUST have a Content-Length header (as per HTTP/1.1) 

    httpc.onreadystatechange = function() { //Call a function when the state changes. 
    if(httpc.readyState == 4 && httpc.status == 200) { // complete and no errors 
     alert(httpc.responseText); // some processing here, or whatever you want to do with the response 
     } 
    } 
    httpc.send(params); 
} 
</script> 
<a href="#" onclick="callPHP('lorem=ipsum&foo=bar')">call PHP script</a> 
<!-- rest of document omitted --> 

Quelle que soit get_data.php produit, qui apparaîtra dans httpc.responseText.Traitement des erreurs, l'enregistrement des événements et la compatibilité multi-navigateur XMLHttpRequest sont laissés comme des exercices simples au lecteur;)

+2

Il est à noter que cela fonctionne uniquement avec les URL relatives en raison de la même politique d'origine: http://en.wikipedia.org/wiki/Same-origin_policy –

2

Je pense que vous plus ou moins juste décrit Ajax.

(désolé pour la réponse laconique)

1

Vous pouvez transmettre des données de PHP à javascript mais la seule façon d'obtenir des données de Javascript vers PHP est via AJAX. La raison en est que vous pouvez construire un javascript valide via PHP, mais pour obtenir des données sur PHP, vous devrez redémarrer PHP, et comme PHP ne fonctionne que pour traiter la sortie, vous aurez besoin d'un rechargement de page ou d'un requête asynchrone.

+0

Ce qui n'est pas vrai, comme je viens de le montrer, j'utilise la méthode de soumission de formulaire au travail pour obtenir des données de JavaScript sur le serveur à peu près tous les jours. – Kezzer

+0

Avec un rechargement de page ou une requête asynchrone? –

2

Il existe plusieurs façons, la plus importante étant d'obtenir des données de formulaire ou d'obtenir la chaîne de requête. Voici une méthode utilisant JavaScript. Lorsque vous cliquez sur un lien, il appellera _vals ('mytarget', 'theval') qui enverra les données du formulaire. Lorsque votre page est publiée, vous pouvez vérifier si les données de ce formulaire ont été définies, puis les extraire des valeurs du formulaire.

<script language="javascript" type="text/javascript"> 
function _vals(target, value){ 
    form1.all("target").value=target; 
    form1.all("value").value=value; 
    form1.submit(); 
} 
</script> 

Vous pouvez également l'obtenir via la chaîne de requête. PHP a vos fonctions globales _GET et _SET pour y parvenir, ce qui le rend beaucoup plus facile.

Je suis sûr qu'il y a probablement plus de méthodes qui sont meilleures, mais ce ne sont là que quelques-unes qui me viennent à l'esprit.

EDIT: Sur cette base de ce que les autres ont dit en utilisant la méthode ci-dessus, vous auriez une balise d'ancrage comme

<a onclick="_vals('name', 'val')" href="#">My Link</a> 

Et puis dans votre PHP, vous pouvez obtenir des données de formulaire en utilisant

$val = $_POST['value']; 

Donc, lorsque vous cliquez sur le lien qui utilise JavaScript, il affichera des données de formulaire et lorsque la page affiche de nouveau à partir de ce clic, vous pouvez ensuite le récupérer à partir du PHP.

7

j'utiliser JSON comme le format et l'Ajax (vraiment XMLHttpRequest) comme client-> mécanisme de serveur.

0

autre façon d'échanger des données de php à javascript ou vice-versa est en utilisant des cookies, vous pouvez enregistrer les cookies en PHP et lu par votre javascript, pour cela, vous ne devez pas utiliser les formulaires ou ajax

2

L'utilisation de cookies est un moyen facile. Vous pouvez utiliser jquery et un pluging comme jquery.cookie ou créer le vôtre. En utilisant Jquery + jquery.cookie, par exemple

<script> 
    var php_value = '<?php echo $php_variable; ?>'; 

    var infobar_active = $.cookie('php_value'); 
    var infobar_alert = any_process(infobar_active); 

    //set a cookie to readit via php 
    $.cookie('infobar_alerta', infobar_alerta); 

    </script> 

    <?php 

    var js_value = code to read a cookie 

    ?> 

J'ai trouvé ce USEFULL côté serveur et cadres hybrides: http://www.phplivex.com/ http://www.ashleyit.com/rs/

Je l'ai utilisé RSJS Script de Ashley mettre à jour les valeurs dans HTML sans aucun problème pendant longtemps jusqu'à ce que j'ai rencontré JQuery (ajax, charger, etc.)

7

J'ai rencontré un problème similaire l'autre jour. Dites, je veux passer des données du côté client au serveur et écrire les données dans un fichier journal. Voici ma solution:

Mon code simple côté client:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
    <title>Test Page</title> 
    <script> 
    function passVal(){ 
     var data = { 
      fn: "filename", 
      str: "this_is_a_dummy_test_string" 
     }; 

     $.post("test.php", data); 
    } 
    passVal(); 
    </script> 

</head> 
<body> 
</body> 
</html> 

et le code php côté serveur:

<?php 
    $fn = $_POST['fn']; 
    $str = $_POST['str']; 
    $file = fopen("/opt/lampp/htdocs/passVal/".$fn.".record","w"); 
    echo fwrite($file,$str); 
    fclose($file); 
?> 

espère que cela fonctionne pour vous et futurs lecteurs!

+0

juste ce dont j'avais besoin, merci! –

+0

J'ai des erreurs suivantes. Quelqu'un connaît la solution? (index): 77 Uncaught ReferenceError: $ n'est pas défini at passVal ((index): 77) -pour-> $ .post ("test.php", data); at (index): 79 -pour-> passVal(); – oOEric

+0

Solution trouvée: Ajouter le