2015-03-27 17 views
21

Ho riscontrato un problema Sto inviando un semplice modulo con un piccolo dato e quando ho controllato la scheda console l'URL di ajax sembra funzionare ma dopo che l'ajax è stato elaborato avviserà un errore e viene reindirizzato alla mia home page e dalla scheda console ho questa weird error:eccezione non rilevata: memoria insufficiente nel processo Ajax

eccezione Uncaught: out of memory

Nel mio ajax ho solo questo semplice codice:

$("#add-comment").on('click', function() { 

    var id = $('input[name=\'review_id\']').val(); 
    var customer_id = $('input[name=\'customer_id\']').val(); 
    var $comment = $('textarea[name=\'user_comment\']').val(); 

    var sample = "test"; 

    $.ajax({ 
     url: 'index.php?route=product/product/writeSubComment', 
     type: 'post', 
     dataType: 'json', 
     data: { text: sample }, 
     beforeSend: function() { 

     }, 
     success: function(data) { 
      console.log(data.test); 
     }, 
     error: function() { 
      alert('ERROR!!!'); 
     } 
    }); 

}); 

Nel mio controller PHP ho questa funzione

public function writeSubComment() { 

    $json = array(); 

    $json['test'] = $this->request->post['text']; 

    $this->response->addHeader('Content-Type: application/json'); 
    $this->response->setOutput(json_encode($json)); 

} 
+2

Ti dispiace segnando una risposta come accettata se qualcuno ha lavorato per voi? In caso contrario, è prassi generale pubblicare la propria soluzione e contrassegnarla come accettata in modo che i futuri visitatori possano comprendere il problema reale e identificare una soluzione. – Fr0zenFyr

risposta

40

Dalla tua descrizione di essere reindirizzato alla tua home page, ma che non hanno il codice nelle vostre Ajax sezioni di risposta per fare questo, ho il sospetto che l'elemento # add commento è un pulsante di invio nel modulo.

In tal caso, il modulo può essere inviato contemporaneamente al codice ajax in esecuzione quando si fa clic sul pulsante # Aggiungi commento. Questo spiegherebbe l'errore di memoria insufficiente poiché il javascript di ajax viene espunto mentre i reindirizzamenti di pagina.

È necessario impedire l'invio del modulo e lasciare che le sezioni success() o failure gestiscano il passaggio successivo (ad esempio, l'aggiornamento della pagina, l'aggiornamento della finestra dei commenti). Un modo per farlo sarebbe quello di cambiare

$("#add-comment").on('click', function() { 
    ... 

a

$('#add-comment').on('click', function(event){ 
    event.preventDefault(); 
    ... 

o modificare il pulsante di invio da

<button type="submit" ...>Add comment</button> 

a

<button type="button" ...>Add comment</button> 

o modificare il tag form come questo

<form onsubmit="return false;"> 

Questa è la mia ipotesi migliore dalle informazioni che ho a disposizione.

+0

Ciao Jerielle, è stato in grado di aiutarti? Eri riuscito a risolvere il problema con questo? – Drakes

+1

Mi chiedo perché OP non ha una risposta accettata. Questa soluzione avrebbe dovuto rispondere al problema e deve essere stata contrassegnata come accettata. @drakes +1 per rivelare il punto chiave della soluzione - il tipo di pulsante non dovrebbe essere 'type =" submit "' se vuoi usare ajax. In caso contrario, i dati tendono a essere pubblicati due volte, prima dal pulsante di invio del modulo e poi quando viene chiamato ajax, viene generato un errore di memoria insufficiente. – Fr0zenFyr

+0

Grazie, utilizzo jQuery Steps e non riesco a modificare il pulsante submit to, ma ho aggiunto onsubmit = "return false;" e ha riparato. –

5

Avevo un problema simile durante il test in Firefox. Cambiare il pulsante type da submit a button ha funzionato per me.

<button type="submit" ...>Add comment</button> 

a

<button type="button" ...>Add comment</button> 
0

ho avuto questo errore nella realizzazione di una ricerca tramite Ajax, quando ho cercato di visualizzare il risultato in HTML DOM e risolto il problema nel modo seguente:

$('..a place where the processed output Ajax request..').on('click', '#add-comment', function() {...});

0

il mio problema risolto modificando

<button onClick="save_order_info_into_database()">Save</button> 

in

<button type="button" onClick="save_order_info_into_database()">Save</button> 

significa aggiungendo type="button" miniera risolto ..

Problemi correlati