2012-08-24 6 views
0

J'ai chargé un fichier dans un tableau en utilisant ajax et après le dédoubler je dois l'enregistrer à nouveau dans le fichier.Ceci se passe tout surCliquez sur un bouton.écrire tableau javascript au fichier

function updatetags(){ 

var alreadyexistingtags; 
var responsetext; 

var r2 = new XMLHttpRequest(); 
r2.open('GET', 'tagsupdated.txt', true); 
r2.send(null); 

r2.onreadystatechange = function() { 
    if (r2.readyState == 4 && r2.status==200) { 

     responsetext=r2.responseText; 

     alreadyexistingtags=responsetext.split(' '); 
     }  
    } 
} 

Je comprends que javascripts ne sont pas côté serveur et c'est pourquoi je ne peux pas faire ce que je veux, mais je suis sûr qu'il doit y avoir un moyen d'écrire alreadyexistingtags [] pour tagsupdated.txt.Any aider? Peut-être que je devrait en quelque sorte passer le tableau à PHP? Et si oui, comment est-ce possible étant donné que PHP est exécuté lorsque la page se charge, quand je dois attendre que le bouton soit pressé?

+2

Votre réponse est là dans votre Tags de question ... AJAX. Passez ce que vous voulez à un script PHP et faites écrire le script PHP à tagsupdated.txt. – Travesty3

+0

Pour développer, il est préférable d'envoyer une commande ping à php, puis de l'écrire. – Sammaye

Répondre

3

Vous allez devoir utiliser AJAX ou une autre méthode pour renvoyer les données à votre serveur, qui peut alors écrire le fichier. Pour ce faire, créez simplement un nouveau script sur votre serveur, par exemple writearray.php, qui accepte le tableau Javascript en entrée. Ensuite, utilisez AJAX pour envoyer une requête à ce fichier avec votre tableau.

Le fichier PHP ressemblerait à quelque chose comme ceci (ce qui est un exemple très simplifié):

<?php 
file_put_contents("where_you_want_the_file.txt", $_POST['array']); 
?> 

On dirait que vous êtes juste stocker votre tableau JavaScript comme un espace liste séparée, de sorte que le Javascript regarderait quelque chose comme ceci:

var str = your_array.join('%20'); // URL encoded spaces separating array entries 
var params = "array=" + str; 
var http = new XMLHttpRequest(); 
http.open("POST", "your_script.php", true); 

//Send the proper header information along with the request 
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Content-length", params.length); 
http.setRequestHeader("Connection", "close"); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     // Do something on success? 
    } 
} 
http.send(params); 

la façon dont cela fonctionne est que vous envoyez un POST avec un tableau nommé sur le terrain, qui détient la représentation textuelle de votre tableau Javascript. Le code PHP vérifie $ _POST ['array'] pour obtenir cette valeur, puis l'écrit dans votre fichier.

Notez que si vous voulez faire quelque chose de plus compliqué, vous devriez envisager d'utiliser JSON. Et aussi comme toujours soyez très prudent avec ce que vous faites avec les données utilisateur.

+2

Addendum: N'oubliez pas d'être * très * conscient de la sécurité lors de l'implémentation de ces fonctionnalités car elles pourraient être utilisées pour planter du contenu malveillant sur votre site. – Leonard

+0

de ce que je undesrtand je devrais faire quelque chose comme Stas Telnov décrit ci-dessus: 'r3.open ('POST', 'myPHP.php', true); ... r3.send (data_string); ' est ce que vous voulez dire? Et si oui, dans le fichier php où le tableau sera stocké? Je veux dire où j'écrirais' $ variable = "MYString"; Fwrite ($ fh, $ variable); 'que devrais-je écrire pour passer mon tableau à $ variable? – yiannis

+0

@yiannis J'ai ajouté beaucoup plus à ma réponse, y compris quelques exemples de code. J'espère que cela vous indiquera la bonne direction. – Telgin

0

Pour envoyer des données vous devez faire une autre requête ajax mais dans la méthode de .send vous devez passer une chaîne avec des données Exemple:

var r3 = new XMLHttpRequest(); 
r3.open('POST', 'writeTextWithoutTags.php', true); 
var data_string='text='+alreadyexistingtags+'&etcParams='+etc_you_params; 
r3.onreadystatechange = function() 
{ 
    if (r3.readyState == 4 && r3.status==200) 
    { 
    alert(r3.responseText);//write result 
    }  
} 
r3.send(data_string); 

Avant envoyé alreadyexistingtags variable que vous devez imploser tableau à chaîne avec séparateur ou mieux à la chaîne JSON. Mais dans writeTextWithoutTags.php ypu doit vérifier les données car javascript exécute ib user brouser et vous ne pouvez pas être sûr que les données sont envoyées par yavastsript pas subi de traitement intrus!

P.S. Si vous pouvez accéder à PHP, je ne comprends pas je ne comprends pas pourquoi vous êtes ici JS - toutes ces actions vous pouvez douder en PHP et ne pas conduire les données du serveur vers le navigateur et retour