web-dev-qa-db-fra.com

Comment accéder PHP variables de session de la fonction jQuery dans un fichier .js?

Comment accéder aux variables de session PHP à partir de la fonction jQuery dans un fichier .js? Dans ce code, je souhaite obtenir la "valeur" d'une variable de session

$(function() {
   $("#progressbar").progressbar({
      value: 37
   });
});
20
Ahmad Farid

Vous pouvez produire le fichier javascript via PHP. Rien ne dit qu'un fichier javascript doit avoir une extension .js. Par exemple dans votre code HTML:

<script src='javascript.php'></script>

Ensuite, votre fichier de script:

<?php header("Content-type: application/javascript"); ?>

$(function() {
    $( "#progressbar" ).progressbar({
        value: <?php echo $_SESSION['value'] ?>
    });

    // ... more javascript ...

Si cette méthode particulière n'est pas une option, vous pouvez placer une demande AJAX dans votre fichier javascript et faire en sorte que les données soient renvoyées au format JSON à partir du script côté serveur.

51
Erik

Je me débattais avec le même problème et suis tombé sur cette page. Une autre solution que j'ai proposée serait la suivante:

Dans votre code html, indiquez la variable de session (la mienne est $_SESSION['Origin']) sur l’élément de votre choix: <p id="sessionOrigin"><?=$_SESSION['Origin'];?></p>

Dans votre js, en utilisant jQuery, vous pouvez y accéder comme suit: $("#sessionOrigin").text();

EDIT: ou même mieux, mettez-le dans une variable input 

<input type="hidden" name="theOrigin" value="<?=$_SESSION['Origin'];?>"></input>

11
Krimo

Si vous voulez maintenir une séparation plus claire entre PHP et JS (cela facilite la mise en évidence de la syntaxe et l'archivage dans les IDE), vous pouvez créer des plugins jquery pour votre code, puis passer le $ _SESSION ['param'] comme variable .

Donc, dans page.php:

<script src="my_progress_bar.js"></script>
<script>
$(function () {
    var percent = <?php echo $_SESSION['percent']; ?>;
    $.my_progress_bar(percent);
});
</script>

Puis dans my_progress_bar.js:

(function ($) {
    $.my_progress_bar = function(percent) {
        $( "#progressbar" ).progressbar({
            value: percent
        });
    };
})(jQuery);
7
icc97

Vous pouvez transmettre vos variables de session de votre script php à JQUERY à l'aide de JSON, tel que 

JS:

jQuery("#rowed2").jqGrid({
    url:'yourphp.php?q=3', 
    datatype: "json", 
    colNames:['Actions'], 
    colModel:[{
                name:'Actions',
                index:'Actions', 
                width:155,
                sortable:false
              }], 
    rowNum:30, 
    rowList:[50,100,150,200,300,400,500,600], 
    pager: '#prowed2', 
    sortname: 'id',
    height: 660,        
    viewrecords: true, 
    sortorder: 'desc',
    gridview:true,
    editurl: 'yourphp.php', 
    caption: 'Caption', 
    gridComplete: function() { 
        var ids = jQuery("#rowed2").jqGrid('getDataIDs'); 
        for (var i = 0; i < ids.length; i++) { 
            var cl = ids[i]; 
            be = "<input style='height:22px;width:50px;' `enter code here` type='button' value='Edit' onclick=\"jQuery('#rowed2').editRow('"+cl+"');\" />"; 
            se = "<input style='height:22px;width:50px;' type='button' value='Save' onclick=\"jQuery('#rowed2').saveRow('"+cl+"');\" />"; 
            ce = "<input style='height:22px;width:50px;' type='button' value='Cancel' onclick=\"jQuery('#rowed2').restoreRow('"+cl+"');\" />"; 
            jQuery("#rowed2").jqGrid('setRowData', ids[i], {Actions:be+se+ce}); 
        } 
    }
}); 

PHP

// start your session
session_start();

// get session from database or create you own
$session_username = $_SESSION['John'];
$session_email = $_SESSION['[email protected]'];

$response = new stdClass();
$response->session_username = $session_username;
$response->session_email = $session_email;

$i = 0;
while ($row = mysqli_fetch_array($result)) { 
    $response->rows[$i]['id'] = $row['ID']; 
    $response->rows[$i]['cell'] = array("", $row['rowvariable1'], $row['rowvariable2']); 
    $i++; 
} 

echo json_encode($response);
// this response (which contains your Session variables) is sent back to your JQUERY 
2
Mark

Vous ne pouvez pas accéder à PHP variables/valeurs de session dans JS, l’un est côté serveur (PHP), l’autre côté client (JS).

Ce que vous pouvez faire est de passer ou renvoyer la valeur SESSION à votre JS, par exemple, un appel AJAX. Dans votre JS, appelez un script PHP qui renvoie simplement la valeur de la variable SESSION à votre JS, puis utilisez-le pour gérer les informations renvoyées.

Vous pouvez également stocker la valeur dans un cookie auquel vous pouvez accéder par l’un ou l’autre des cadres, bien que cela ne soit pas la meilleure approche dans votre situation.

OU vous pouvez générer un fichier JS dans votre PHP qui renvoie/définit la variable, c'est-à-dire:

<? php
echo "<script type='text/javascript'>
    alert('".json_encode($_SESSION['msg'])."');
</script>";
?>
1
SW4

Étrangement, importer directement à partir de $ _SESSION ne fonctionne pas mais doit le faire pour que cela fonctionne:

<?php
$phpVar = $_SESSION['var'];
?>

<script>
    var variableValue= '<?php echo $phpVar; ?>';
    var imported = document.createElement('script');
    imported.src = './your/path/to.js';
    document.head.appendChild(imported);
</script>

et en to.js

$(document).ready(function(){
alert(variableValue);
// rest of js file
0
Ardhi

JQuery n’est pas strictement parlant, mais j’ai trouvé cette méthode plus facile que jQuery. Il existe probablement d'innombrables méthodes pour y parvenir et de nombreuses méthodes intelligentes, mais toutes n'ont pas fonctionné pour moi. Cependant, la méthode suivante a toujours fonctionné et je la passe au cas où cela aiderait quelqu'un d'autre.

Trois bibliothèques javascript sont requises: createCookie, readCookie et eraseCookie. Ces bibliothèques ne sont pas les miennes, mais je les utilise depuis environ 5 ans et je ne connais pas leur origine.

createCookie = function(name, value, days) {
if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "; expires=" + date.toGMTString();
}
else var expires = "";

document.cookie = name + "=" + value + expires + "; path=/";
}

readCookie = function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
eraseCookie = function (name) {
   createCookie(name, "", -1);
}

Pour les appeler, vous devez créer une petite fonction PHP, normalement intégrée à votre bibliothèque de support, comme suit:

<?php
 function createjavaScriptCookie($sessionVarible) {
 $s =  "<script>";
 $s = $s.'createCookie('. '"'. $sessionVarible                 
 .'",'.'"'.$_SESSION[$sessionVarible].'"'. ',"1"'.')';
 $s = $s."</script>";
 echo $s;
}
?>

Donc, pour utiliser tout ce que vous devez maintenant inclure dans votre fichier index.php est

$_SESSION["video_dir"] = "/video_dir/";
createjavaScriptCookie("video_dir");

Maintenant, dans votre bibliothèque javascript.js, vous pouvez récupérer le cookie avec le code suivant:

var videoPath = readCookie("video_dir") +'/'+ video_ID + '.mp4';

J'espère que ça aide.

0
Alexander