2013-07-23 4 views
14

muszę napisać duży ciąg ogromny o wielkości około 3mb, czy można go wysłać do php za pomocą nieparametrycznych adresów URL?Ajax JQuery - po ogromnej wartości ciągu

Jeśli wyślę go w adresach URL, żądanie osiągnie limit rozmiaru w adresie URL.

Jak można obejść ten problem? jakaś wskazówka?

wielkie dzięki.

Właściwie robię to tak:

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

używam PHP i jQuery i wouldl i ike wysłać ciąg 3MB base64 do PHP na prostym adresie URL, jak site.com/script.php

ciąg jest Reader File API base64 obrazu

ten jest przykładem napisu ale ten nie osiągnie wielkość ograniczenie to nie jest przyczyna 3MB jest mniej niepokojące w wklejenia że pokazać wam 3MB, http://jsfiddle.net/QSyMc/

Odpowiedz

24

Trzeba będzie użyć żądania 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'); 
    } 
}); 

w skrypcie po stronie serwera pobrać wartość:

$_POST["value"] 

Ponadto może być konieczne zwiększenie dozwolonej wielkości żądań. Na przykład w pliku .htaccess lub w php.ini można ustawić wartość post_max_size:

#set max post size 
php_value post_max_size 20M 
+4

Jestem już wysyłanie że w ten sposób: P @Darin Dimitrov i przyczyny tego limitu rozmiaru url osiągnęła – bombastic

+0

To znaczy dostać konsolę „ty osiągnął granicę żądanie” – bombastic

+0

@bombastic Będziemy potrzebować więcej informacji później. Co to jest "URL", który też przesyłasz? Jakiego języka po stronie serwera używa? itp. – crush

-1

Spróbuj tego:

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

na pewno trzeba użyć metody POST. Jeśli ciąg jest nadal duży, sprawdź plik php.ini, aby znaleźć maksymalny rozmiar parametru POST.

Aby zmienić tę wartość, wartości, czy którekolwiek z tych:

1. Zmiana wartości w php.ini

post_max_size=20M 
upload_max_filesize=20M 

2. lub dodać ten kod do pliku .htaccess

php_value post_max_size 20M 
php_value upload_max_filesize 20M 

Który użyć, zależy od tego, do czego masz dostęp.

7

spróbuj processData na false i reprezentacją ciąg swojej 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); 
    } 
}); 

Z dokumentacji jQuery.ajax:

processData (domyślnie true)

Rodzaj: Boolean

Domyślnie dane przekazane w postaci do opcji danych jako obiektu (technicznie, cokolwiek innego niż ciąg znaków ) zostaną przetworzone i przekształcone w ciąg zapytania, dopasowując do domyślnego typu treści "application/x-www" -formalnie zakodowany ". Jeśli chcesz wysłać DOMDocument lub inne nieprzetworzone dane, ustaw tę opcję na wartość false.

+0

Czy możesz dodać wyjaśnienie, dlaczego uważasz, że jest to konieczne lub dlaczego to zadziałałoby? – crush

+0

Edytowałem odpowiedź – krampstudio

+0

Dzięki, zadziałało. Niesamowite. – Nabid

3

Natknąłem się na podobny problem. Nie była to długość ciągu zapytania, ale raczej liczba zmiennych, które przekazałem serwerowi. Plik php.ini umieszcza limit w polu max_input_vars na 1200 zmiennych. W moim przypadku przekroczyłem tę kwotę, a nie kwotę post_max_size. Musiał wrócić i sprawić, by zapytanie było wydajniejsze i poniżej limitu. Myślę, że mogłem podnieść ustawienie php.ini, ale skończyłem na lepszym kodzie, wyłączając nieistotne parametry zapytania.