2012-09-17 26 views
5

que tienen una matriz multidimensional, que consta de 426 conjuntos más pequeños, que también forman parte de 4 atributos .. A continuación se muestra un ejemplo de una de las matrices 426 ...Se está cortando la matriz sobre la publicación de ajax. Límite de publicación Ajax?

array(//Main array 
      0 => array(//1 of 426 arrays 
       'name' => 'Danny', 
       'email' => '[email protected]', 
       'picture_url' => 'http://www.website.com', 
       'score' => 89 
     ), 
    ) 

Quiero poner esta matriz con jQuery de ajax funciona en un archivo php, que los agrega a una base de datos ... Mi problema es que la matriz parece estar cortada cuando se publica en el archivo php. Solo aproximadamente la mitad de la matriz llega realmente al archivo php ...

Esto me ha llevado a creer que puede haber un límite de tamaño de archivo cuando se publica sobre ajax. Sin embargo, el tamaño de mi serie parece ser relativamente pequeño ..

estoy corriendo mi solicitud en WAMP ..

¿Alguien puede arrojar algo de luz lo que está sucediendo posiblemente?

ACTUALIZACIÓN:

les dejo mi arsenal de este modo:

$.ajax({ 
    type: "POST", 
    url: "invite_friends.php", 
    data: { 
    theID: me.id, 
    friends: multidimensional_array //This is the array <--- 
    }, 
    success: function(data, textStatus, jqXHR) { 
    return console.log(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
    return alert("Error: Oops, there has been a problem"); 
    } 
}); 

Y recuperar mi array (en invite_friends.php) de esta manera ..

if($_POST['friends']) { 
    $friends = $_POST['friends']; 
} else { 
    $friends = FALSE; 
} 
+2

¿Cómo se publica la matriz? ¿Puedes compartir el código? – Tchoupi

+0

Cuando dices post ¿te refieres a get? – Erik

+0

De acuerdo con w3schools.com (sí, lo sé: http://w3fools.com) GET tiene limitaciones de tamaño, pero POST no. – 11684

Respuesta

13

Usted necesita para abrir su archivo php.ini y establecer (o crear) esta línea:

max_input_vars = 1000000

max_input_vars tiene un valor por defecto de 1000, que cortará una matriz en 1000 elementos totales . Simplemente cámbialo a un número realmente alto (en mi caso, necesitaba establecerlo en un millón).

Desde el Manual de PHP:

¿Cómo se pueden aceptar muchas variables de entrada (se aplica al límite de $ _GET, $ _POST y $ _COOKIE superglobal por separado). El uso de esta directiva mitiga la posibilidad de ataques de denegación de servicio que usan colisiones hash . Si hay más variables de entrada que las especificadas en esta directiva , se emite un E_WARNING y otras variables de entrada son truncadas a partir de la solicitud. Este límite se aplica solo a cada nivel de anidación de una matriz de entrada multidimensional.

Tenga en cuenta: Como dice el manual, este límite predeterminado se puso en marcha para evitar ataques de denegación de servicio.

Espero que esto ayude a pesar de que esta es una vieja pregunta.

+0

Ah sí, gracias. Eres un salvavidas. – Danny

+0

¡De nada! – FastTrack

0

entorno Try su php_value post_max_size a por lo menos 16M en su .htaccess y max_input_time para que no tenga tiempo de espera.

php_value post_max_size 16M 
php_value max_input_time 4000 
+0

Los he agregado a mi htaccess y he cambiado mi archivo php ini, y me temo que esto no ha ayudado. – Danny

+0

puede intentar obtener la publicación de la matriz completa y guardarla en un archivo usando su consola solo para verificar qué tan grande es la matriz que está publicando – Alex

+0

Disculpe por la respuesta tardía, estuvo fuera de la oficina hasta la mañana. He colocado todo el contenido de la matriz en un archivo de texto, y el tamaño es 48 KB – Danny

1

Tengo exactamente el mismo problema.

$.ajax({data:{x:x,y:y}}); 

Finalmente, resulta que algunos de los valores son formato de fecha (objeto). Cuando se convierten a tipos simples (cadena o entero), el problema se resuelve. Espero que esto pueda ayudar.

4

Debe convertir todos sus datos en formato json en el lado del cliente y enviarlos como texto.

var jsonDataString = JSON.stringify(data) 
//data - array, associative array, any other variables 

$.ajax({ 
... 
    data: { 
     friends: jsonDataString, 
    } 
... 
}); 

En el lado del servidor simplemente decodifica el archivo json.

<?php 
... 
$friendsJsonString = $_POST['friends']; 
$friends = json_decode($friendsJsonString); 
... 

El cambio de php.ini no es una buena idea debido a los riesgos de seguridad.

Cuestiones relacionadas