2015-03-27 6 views
21

Ich habe ein Problem Ich reiche ein einfaches Formular, das eine kleine Daten und wenn ich überprüft in der Registerkarte console die URL von Ajax scheint zu arbeiten, aber nachdem der Ajax wurde verarbeitet einen Fehler aufmerksam machen und es ist auf meiner Homepage umgeleitet und von der Konsole Registerkarte ich habe diese weird error:Uncaught Ausnahme: nicht genügend Speicher in Ajax Prozess

abgefangene Ausnahme: der Speicher

In meiner ajax ich habe diesen einfachen Code nur:

$("#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!!!'); 
     } 
    }); 

}); 

In meinem PHP-Controller Ich habe diese Funktion

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

Stört es dich Kennzeichnung eine Antwort als angenommen, wenn eine für Sie gearbeitet? Wenn nicht, ist es eine allgemeine Praxis, Ihre eigene Lösung zu veröffentlichen und sie als akzeptiert zu markieren, damit zukünftige Besucher das eigentliche Problem verstehen und eine Lösung finden können. – Fr0zenFyr

Antwort

40

Aus Ihrer Beschreibung zu Ihrer Homepage umgeleitet werden, aber keinen Code in Ihren Ajax-Antwort Abschnitten, dies zu tun, ich vermute, dass das Element # Add- Kommentar ist ein Absenden-Button in Ihrem Formular.

Wenn dies der Fall ist, kann das Formular zur gleichen Zeit gesendet werden, wenn der Ajax-Code ausgeführt wird, wenn Sie auf die Schaltfläche # add-comment submit klicken. Dies würde den Fehler "nicht genügend Arbeitsspeicher" erklären, da das Ajax-JavaScript während der Umleitung der Seite gelöscht wird.

Sie müssen verhindern, dass Ihr Formular übermittelt wird, und die Abschnitte success() oder failure behandeln den nächsten Schritt (z. B. Aktualisieren der Seite, Aktualisieren des Kommentarfelds). Eine Möglichkeit, dies zu tun, wäre

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

zu

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

oder die Schaltfläche aus einreichen ändern

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

zu

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

oder den Formular-Tag ändern wie dieses

<form onsubmit="return false;"> 

Dies ist meine beste Schätzung aus den Informationen, die ich zur Verfügung habe.

+0

Hallo Jerielle, konnte dir das überhaupt helfen? Konnten Sie das Problem damit lösen? – Drakes

+1

Ich frage mich, warum OP keine akzeptierte Antwort hat. Diese Lösung sollte das Problem beantwortet haben und als akzeptiert markiert worden sein. @drakes +1, um den Schlüsselpunkt zur Lösung zu enthüllen - der Knopftyp sollte nicht "type =" submit "' sein, wenn du ajax verwenden willst. Ansonsten werden die Daten zweimal gepostet, zuerst von der Schaltfläche "Senden" und dann, wenn Ajax aufgerufen wird, wird ein Fehler wegen zu wenig Arbeitsspeicher ausgelöst. – Fr0zenFyr

+0

Danke, ich benutze jQuery Steps und ich kann nicht die Schaltfläche zum Senden an ändern, aber ich habe onsubmit = "return false;" und es wurde behoben. –

5

Ich hatte ein ähnliches Problem beim Testen in Firefox. Ändern der Taste type von submit bis button arbeitete für mich.

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

zu

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

Ich habe bei der Durchführung einer Suche über Ajax diesen Fehler hatte, als ich versuchte, das Ergebnis in HTML DOM angezeigt werden und das Problem gelöst, wie folgt:

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

0

mein Problem durch

Wechsel gelöst 0
<button onClick="save_order_info_into_database()">Save</button> 

in

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

bedeutet durch type="button" gelöst Mine Hinzufügen ..

Verwandte Themen