2013-07-23 11 views
14

Ich muss eine riesige Zeichenfolge groß über 3 MB POST, ist es möglich, es an PHP senden mit nicht URL Params?Jquery Ajax - Post riesige Zeichenfolge Wert

Wenn ich es in URL-Parameter sende, erreicht die Anfrage die Größenbeschränkung in URL.

Wie kann das umgehen? irgendeine Ahnung?

vielen Dank.

ich tue es so eigentlich:

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

i PHP und jQuery bin mit, und ich wouldl ike die 3mb base64 String PHP auf einer einfachen URL, wie site.com/script.php

senden

der String ist ein File Reader API base64 Bild

dies ein Beispiel für String ist, aber dies wird die Größe begrenzen sie nicht erreichen, ist kein 3mb weniger Ursache ist in dem Einfügen beunruhigend, dass Sie eine 3mb zeigen, http://jsfiddle.net/QSyMc/

Antwort

24

Sie müssen eine POST-Anfrage verwenden:

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

und in der Server-seitiges Script den Wert abzurufen:

$_POST["value"] 

Auch müssen Sie möglicherweise die zulässige Anforderungsgröße erhöhen. Zum Beispiel in Ihre .htaccess Datei oder in Ihrem php.ini Sie den post_max_size Wert einstellen könnte:

#set max post size 
php_value post_max_size 20M 
+4

Ich sende das bereits auf diese Weise: P @Darin Dimitrov und diese Ursache Url-Größenlimit erreicht – bombastic

+0

ich meine, ich bekomme Konsole "Sie erreichte Anfrage begrenzen" – bombastic

+0

@bombastic Wir brauchen mehr Informationen dann. Was ist die "URL", die Sie auch senden? Welche serverseitige Sprache verwendet es? usw. – crush

-1

Versuchen Sie folgendes:

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

Sie auf jeden Fall benötigen POST-Methode zu verwenden. Wenn die Zeichenfolge immer noch zu groß ist, überprüfen Sie Ihre php.ini-Datei, um die maximale Größe des POST-Parameters zu ermitteln.

Um diesen Wert zu Wert zu ändern, führen Sie eine von denen:

1. Änderungswerte in php.ini

post_max_size=20M 
upload_max_filesize=20M 

2. oder diesen Code in den .htaccess-Datei

Welche zu verwenden ist hängt davon ab, was Sie zugreifen können.

7

Versuchen mit processData auf false und eine String-Darstellung Ihrer 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); 
    } 
}); 

Von der jQuery.ajax Dokumentation:

verarbeite (Standard: true)

Typ: Boolean

Standardmäßig werden Daten, die in an die Datenoption übergeben werden (technisch, alles andere als ein String) verarbeitet und in eine Abfragezeichenfolge umgewandelt, die dem Standardinhaltstyp "application/x-www -form-urlencodiert ". Wenn Sie ein DOMDocument oder andere nicht verarbeitete Daten senden möchten, setzen Sie diese Option auf false.

+0

Können Sie einige Erklärungen hinzufügen, warum Sie denke, das ist notwendig oder warum das funktionieren würde? – crush

+0

Ich habe die Antwort bearbeitet – krampstudio

+0

Danke, es hat funktioniert. Genial. – Nabid

3

Ich stieß auf ein ähnliches Problem. Es war nicht die Länge der Abfragezeichenfolge, sondern die Anzahl der Variablen, die ich an den Server übergab. Die php.ini legt ein Limit im Feld max_input_vars auf 1200 Variablen fest. In meinem Fall habe ich diesen Betrag und nicht den Betrag von post_max_size überschritten. Musste zurückgehen und die Abfrage effizienter und unter dem Limit machen. Ich denke, ich hätte die php.ini-Einstellung erhöhen können, aber ich habe mit besserem Code abgeschlossen, indem ich nicht wesentliche Abfrageparameter deaktiviert habe.