2010-12-06 7 views

Répondre

51

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 script:

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

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

    // ... more javascript ... 

Si cette méthode particulière est pas une option, vous pouvez mettre une requête AJAX dans votre fichier javascript, et avoir les données renvoyé en tant que JSON à partir du script côté serveur.

+0

si je veux le mettre dans le $ (document Fonction .ready() qui se trouve dans le fichier .js? –

+1

l'extension '.js' ne veut rien dire: renommez-la .php et utilisez vos variables de session comme je l'ai montré ci-dessus. Vos fichiers javascript pourraient être 'file.gibbldygook' et ils fonctionneraient toujours. – Erik

+0

Vous voulez dire que je peux écrire du code PHP dans le fichier .js? Quelle devrait être la structure maintenant? Comment puis-je mettre deux fonctions sous le $ (document) .ready() à deux fichiers différents? –

1

Tu ne peux pas les variables de session PHP d'accès/valeurs JS, on est côté serveur (PHP), l'autre côté client (JS).

Qu'est-ce que vous pouvez faire est passe ou retour la valeur de session à votre JS, par exemple, un appel AJAX. Dans votre JS, appelez un script PHP qui sort simplement pour retourner à votre JS la valeur de la variable SESSION, puis utilisez votre JS pour gérer cette information retournée.

Vous pouvez également stocker la valeur dans un COOKIE auquel vous pouvez accéder par l'un ou l'autre des frameworks, même si cette approche n'est peut-être pas la meilleure dans votre situation.

OU vous pouvez générer quelques JS dans votre PHP qui retourne/définit la variable, i.e. .:

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

Vous pouvez vous passer des variables de session à partir de votre script php pour JQUERY en utilisant JSON tels 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 
11

je luttais avec le même problème et trébuché sur cette page. Une autre solution, je suis venu avec serait:

Dans votre code html, écho de la variable de session (la mienne ici est $_SESSION['origin']) à tout élément de votre choix: <p id="sessionOrigin"><?=$_SESSION['origin'];?></p>

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

EDIT: ou mieux encore, le mettre dans un caché input

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

+1

C'est une meilleure solution que de faire un appel AJAX qui prend du temps de traitement. Sauf si la variable de session est une information sensible comme le mot de passe, etc. – trante

7

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

Donc à la page.php:

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

Puis, en my_progress_bar.js:

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

Ceci est strictement ne parle pas en utilisant jQuery, mais je l'ai trouvé cette méthode plus facile que d'utiliser jQuery. Il y a probablement d'innombrables méthodes pour y parvenir et beaucoup d'astucieuses, mais toutes n'ont pas fonctionné pour moi. Cependant la méthode suivante a toujours fonctionné et je la passe une au cas où cela aiderait quelqu'un d'autre. Il faut trois bibliothèques javascript, createCookie, readCookie et eraseCookie. Ces bibliothèques ne m'appartiennent pas mais j'ai commencé à les utiliser il y a 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 dans le cadre de votre bibliothèque de soutien, comme suit:

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

donc à utiliser tout ce que vous avez maintenant d'inclure dans votre index. fichier php est

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

maintenant dans votre javascript library.js vous pouvez récupérer le cookie avec le code suivant:

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

J'espère que cela aide.

0

importation Étrangement directement à partir de $ _SESSION ne fonctionne pas, mais doivent le faire pour le faire fonctionner:

<?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 to.js

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