web-dev-qa-db-fra.com

Jquery Ajax - affiche une énorme valeur de chaîne

j'ai besoin de POST une énorme chaîne d'environ 3 Mo, est-il possible de l'envoyer à php en utilisant des paramètres non url?

Si je l'envoie en paramètres url, la demande atteint la taille limite en url.

Comment contourner cela? un indice?

merci beaucoup.

En fait, je le fais comme ceci:

$.ajax({
 type:'POST',
.......
data:{string:3MB_string}
});

j'utilise PHP et jQuery, et je voudrais envoyer la chaîne base64 de 3 Mo à php sur une simple URL, comme site.com/script.php

La chaîne est une image base64 de l'API File Reader

ceci est un exemple de chaîne mais cela n'atteindra pas la taille limite ce n'est pas un 3mb est moins gênant en collant que pour vous montrer un 3mb, http://jsfiddle.net/QSyMc/

17
bombastic

Vous devrez utiliser une demande POST:

$.ajax({
    url: '/script.php',
    type: 'POST',
    data: { value: 'some huge string here' },
    success: function(result) {
        alert('the request was successfully sent to the server');
    }
});

et dans votre script côté serveur, récupérez la valeur:

$_POST["value"]

Vous devrez peut-être également augmenter la taille de demande autorisée. Par exemple, dans votre .htaccess fichier ou dans votre php.ini vous pouvez définir le post_max_size valeur:

#set max post size
php_value post_max_size 20M
28
Darin Dimitrov

Essayez avec processData à false et une représentation sous forme de chaîne de votre JSON

var data = { "some" : "data" };
$.ajax({
    type: "POST",
    url: "/script",
    processData: false,
    contentType: 'application/json',
    data: JSON.stringify(data),
    success: function(r) {
       console.log(r);
    }
});

De la documentation jQuery.ajax :

processData (par défaut: vrai)

Type: booléen

Par défaut, les données transmises à l'option data en tant qu'objet (techniquement, autre chose qu'une chaîne) seront traitées et transformées en une chaîne de requête , ajustement au type de contenu par défaut "application/x-www-form-urlencoded". Si vous souhaitez envoyer un DOMDocument ou d'autres données non traitées, définissez cette option sur false.

9
krampstudio

Vous devez absolument utiliser la méthode POST. Si la chaîne est toujours trop grande, consultez votre fichier php.ini pour connaître la taille maximale du paramètre POST.

Pour modifier cette valeur, effectuez l'une des opérations suivantes:

1. changez les valeurs dans php.ini

post_max_size=20M
upload_max_filesize=20M

2. Ou ajoutez ce code au fichier .htaccess

php_value post_max_size 20M
php_value upload_max_filesize 20M

Lequel utiliser dépend de ce à quoi vous avez accès.

3
Artem Kiselev

J'ai rencontré un problème similaire. Ce n'était pas la longueur de la chaîne de requête, mais plutôt le nombre de variables que je transmettais au serveur. Le php.ini place une limite dans le champ max_input_vars à 1200 variables. Dans mon cas, je dépassais ce montant plutôt que le montant post_max_size. J'ai dû revenir en arrière et rendre la requête plus efficace et sous la limite. Je suppose que j'aurais pu augmenter le paramètre php.ini mais j'ai fini avec un meilleur code en désactivant les paramètres de requête non essentiels.

3
jdp

Essaye ça:

var str = "YOUR STRING";
$.ajax({
    url: 'YOUR URL',
    type: 'POST',
    data: { mystring: str },
    success: function(result) {
        console.log(result);
    }
});
0
Dhaval Bharadva