2010-09-15 17 views
4

J'essaie d'envoyer un fichier XML à partir d'un champ de texte dans mon code HTML, via ajax à un fichier PHP. Ceci est le fichier PHP tout-puissant:Envoi de beaucoup de données via POST ou GET

<?php 
    $data = urldecode($_POST["xml"]); 

    echo $data; 
?> 

Les données sont envoyées à ce fichier en tant que tel:

$("#btn_save").click(function() { 
    var data = escape($("#textfield").text()); 
    alert(data); 
    $.ajax({ 
     url:  "validate.php", 
     method:  "POST", 
     data:  "xml=" + data, 
     complete: function(e) { alert(e.responseText); } 
    }); 
}); 

Maintenant, tant que je n'envoyé plus de quelques lignes de code, cela fonctionne Comme il se doit. Lorsque je colle dans un fichier XML de 60 lignes cependant, validate.php renvoie

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>403 Forbidden</title> 
</head><body> 
<h1>Forbidden</h1> 
<p>You don't have permission to access /xml_stylist/form/validate.php 
on this server.</p> 
<p>Additionally, a 404 Not Found 
error was encountered while trying to use an ErrorDocument to handle the request.</p> 
<hr> 
<address>Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at dahwan.info Port 80</address> 
</body></html> 

Qu'est-ce que je fais mal?

Merci

+1

Qu'est-ce qu'un lot de données? La plupart des serveurs ont une entrée de données maximale autorisée qui est acceptée. –

+0

* Toujours * vérifier votre Apache 'error_log' avant de faire une recherche avec Google, ou même poster une question ici. Que dit votre error_log? – Lekensteyn

Répondre

5

Modifier

method: "POST" 

à

type: "POST" 

qui peuvent faire l'affaire.

+0

tu m'as battu! J'ai toujours ce "type" _doit être "méthode" ... cela aurait du sens –

+0

Ouais, merci! :) – Hubro

0

Définition de l'option de données sur les appels ajax signifie jquery va ajouter à la chaîne de requête dans une requête GET. La plupart des navigateurs ont une limite sur la longueur d'une requête get. Si vos données XML sont trop volumineuses, vous devez passer à POST.

+0

La limite sur GET imposée par les navigateurs était d'environ 4K en général, peut-être que c'est encore le cas. J'ai arrêté d'utiliser GET pour quelque chose de lourd quand je l'ai découvert. –

1

La plupart des navigateurs ont un maximum de 2 083 caractères dans l'URL; il n'y a pas de limite pour une requête POST. Une requête GET transmettra les paramètres dans l'url, contrairement à un post. Tout dépend de combien vous envoyez réellement pour déterminer ce que vous devez utiliser ou si vous envoyez des données sensibles (utilisez POST).

0

Optimisez votre php.ini

  • post_max_size vous devez définir votre memory_limit à valeur plus élevée ..
  • dépend de l'utilisation de la mémoire de votre script
    également
  • max_execution_time pourrait être un problème
0

essayez ceci:

$("#btn_save").click(function() { 
    var data = $("#textfield").text(); 
    $.ajax({ 
     url:  "validate.php", 
     type:  "POST", 
     data:  {"xml": data}, 
     complete: function(e) { alert(e.responseText); } 
    }); 
}); 
4

BenSho est correct, l'argument est appelé type. En outre:

$("#textfield").text() 

Je devine que c'est un <textarea>. Vous ne devriez pas utiliser text() ou html() pour lire le contenu d'un champ de saisie, il ne fait pas ce que vous pensez. Utilisez val().

var data = escape($("#textfield").text()); 

Ne jamais utiliser escape(). C'est une fonction spécifique à JavaScript qui ressemble à l'encodage d'URL mais qui ne l'est pas. Si vous l'utilisez pour l'encodage d'URL, vous allez corrompre les signes plus et tous les caractères non-ASCII.

La fonction JavaScript correcte pour le codage d'URL est encodeURIComponent().Cependant, puisque vous utilisez jQuery, beaucoup mieux pour le laisser travailler sur l'URL de codage pour vous par le passage d'un objet:

data: {xml: $("#textfield").text()}, 

Enfin:

$data = urldecode($_POST["xml"]); 

Vous ne devez pas (et ne devrait pas) URL-décoder quoi que ce soit manuellement. URL PHP: décode les paramètres d'un corps de requête en chaînes brutes pour vous.