2012-05-29 5 views
0

Je suis actuellement en utilisant ci-dessous méthode pour appeler un fichier php externe avec certaines variables en utilisant javascriptCharge fichier php externe avec javascript src

<script src="http://www.domain.com/function.php?param=A" type="text/javascript"></script> 

Et le code dans le fichier function.php renverra les données au format Javascript , quelque chose comme

<?php Header("content-type: application/x-javascript"); 
$p = $_GET['param']; 

$r = mt_rand(0, 10); 
echo "document.write('" . $p . $r . "');"; 
?> 

Ceci est juste un exemple simple. Mon problème est sur Google Chrome (v19), si la page n'a pas fini de charger, le nombre aléatoire ne sera pas aléatoire quand je continue de rafraîchir. Il ne deviendra vraiment aléatoire que lorsque j'appuie sur le bouton d'actualisation APRÈS le chargement de la page. Pourquoi cela arrive-t-il et comment puis-je le résoudre?

J'ai testé sur Firefox 12 et IE8, même si je rafraîchis la page avant la fin du chargement, le nombre aléatoire sera toujours régénéré.

+0

Y at-il une raison pour laquelle vous n'utilisez pas Javascript 'Math.random()'? – dda

+0

Désolé, peut-être que je rends l'exemple ici trop simple. En fait, je chargeais la base de données MySQL dans le fichier PHP, chargez des données et sélectionnez aléatoirement l'une d'entre elles pour la renvoyer à la page qui l'appelle. – huiqing

+0

Essayez d'ajouter des en-têtes sans cache à la réponse. – DCoder

Répondre

0

Vous avez besoin d'un petit hack JS. Fondamentalement, vous voulez ajouter dynamiquement la balise <script> dans JS et ajouter un paramètre aléatoire à la fin de l'URL.

var hookScripts = function(url, src) { 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = url || null; 
    s.innerHTML = src || null; 
    document.getElementsByTagName("head")[0].appendChild(s); 
}; 

hookScripts('http://www.domain.com/function.php?param=A&randomSalt=' + Math.random()); 

Cela forcera chrome à demander à nouveau le fichier JS.

+0

Merci! La méthode au sel aléatoire a résolu mon problème! Quoi qu'il en soit, j'ai combiné le code PHP dans le Javascript src pour générer le sel aléatoire (parce que j'ai besoin d'insérer cette section de code Javascript à plusieurs parties de la page Web). – huiqing

1

La chaîne de requête de votre URL indique param=A, vous référencez $_GET['param1'] sur votre fichier PHP/JS. Ne devrait-il pas être $_GET['param']?

Vous aurez probablement envie d'ajouter les en-têtes afin que votre fichier js ne cache

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

Voir http://php.net/manual/en/function.header.php

+0

oui désolé ma faute sur cela. mais ce n'est pas le problème. – huiqing

+0

Merci. J'ai ajouté l'en-tête, mais le problème persiste toujours. Et seulement dans Google Chrome ... – huiqing

Questions connexes