2010-12-06 7 views

Antwort

51

Sie können die JavaScript-Datei über PHP erzeugen. Nichts sagt, dass eine JavaScript-Datei eine .js Erweiterung haben muss. Zum Beispiel in Ihrer HTML:

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

Dann Skriptdatei:

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

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

    // ... more javascript ... 

Wenn diese spezielle Methode nicht möglich ist, könnten Sie einen AJAX-Request in Ihrer Javascript-Datei setzen, und haben die Daten als JSON vom serverseitigen Skript zurückgegeben.

+0

Was ist, wenn ich es in der $ setzen wollen (document) .ready() - Funktion, die in der .js-Datei ist? –

+1

Die '.js'-Erweiterung bedeutet nichts. Benennen Sie sie um .php und verwenden Sie Ihre Session-Variablen, wie ich oben gezeigt habe. Ihre Javascript-Dateien könnten 'file.gibbldygook' sein und sie würden immer noch funktionieren. – Erik

+0

Sie meinen, ich kann PHP-Code in der .js-Datei schreiben? Was sollte jetzt die Struktur sein? Wie kann ich zwei Funktionen unter dem $ (document) .ready() auf zwei verschiedenen Dateien setzen? –

1

Sie kippt Zugang PHP-Variablen erhalten/Werte in JS, ist eine Server-Seite (PHP), die andere Client-Seite (JS).

Was können Sie tun, ist Pass oder Rückkehr der SESSION Wert Ihrer JS, indem beispielsweise eine AJAX-Aufruf. Rufen Sie in Ihrem JS einen Aufruf an ein PHP-Skript auf, das einfach die Werte der SESSION-Variablen an Ihre JS zurückgibt, und verwenden Sie dann Ihre JS, um diese zurückgegebenen Informationen zu verarbeiten.

Alternativ können Sie den Wert in einem COOKIE speichern, auf das Sie über das Framework zugreifen können. Dies ist jedoch möglicherweise nicht der beste Ansatz in Ihrer Situation.

ODER Sie können einige JS in Ihrem PHP erzeugen, die zurückgibt/setzt die Variable, d.h .:

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

Sie können Sie Session-Variablen von PHP-Skript zu JQUERY mit JSON wie

JS passieren:

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

Ich war mit dem gleichen Problem zu kämpfen und stolperte auf dieser Seite. Eine andere Lösung kam ich mit wäre dies:

In Ihrem HTML, Echo der Session-Variable (meine hier ist $_SESSION['origin']) zu jedem Element Ihrer Wahl: <p id="sessionOrigin"><?=$_SESSION['origin'];?></p>

In Ihrem js, jQuery verwenden, können Sie zugreifen es etwa so: $("#sessionOrigin").text();

EDIT: oder noch besser, steckt es in einem versteckten input

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

+1

Das ist die bessere Lösung als einen AJAX-Aufruf zu machen, der Prozesszeit in Anspruch nimmt. Es sei denn, die Sitzungsvariable ist eine sensible Information wie Passwort etc. – trante

7

Wenn Sie eine klarere Trennung von PHP und JS (es macht Syntaxhervorhebung und Einchecken in IDEs einfacher) dann können Sie Jquery-Plugins für Ihren Code erstellen und übergeben Sie dann die $ _SESSION ['param'] als eine Variable .

So in Seite.php:

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

Dann in my_progress_bar.js:

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

Dies ist streng genommen nicht mit jQuery, aber ich habe diese Methode einfacher als die Verwendung von jQuery gefunden. Es gibt wahrscheinlich endlose Methoden, um dies zu erreichen und viele clevere hier, aber nicht alle haben für mich gearbeitet. Allerdings hat die folgende Methode immer funktioniert und ich gebe sie weiter, falls sie jemand anderem hilft.

Drei Javascript-Bibliotheken sind erforderlich, createCookie, readCookie und eraseCookie. Diese Bibliotheken sind nicht meine, aber ich habe sie vor ungefähr 5 Jahren benutzt und kenne ihre Herkunft nicht.

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); 
} 

sie nennen Sie eine kleine PHP-Funktion erstellen müssen, in der Regel als Teil Ihrer Support-Bibliothek wie folgt:

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

So alles, was Sie jetzt in Ihrem Index enthalten müssen verwenden. pHP-Datei ist

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

Jetzt in Ihrem Javascript library.js Sie das Cookie mit dem folgenden Code wiederherstellen können:

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

Ich hoffe, das hilft.

0

Seltsamer direkt von $ _SESSION nicht arbeiten, sondern müssen dies tun, damit es funktioniert importieren:

<?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> 

und in to.js

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