Bewertung von Erfolg Daten von jQuery .ajax() und return true/false, basierend auf dem Ergebnis
Grüße stackoverflow-Gemeinschaft. Ich bin ein lange Zeit lurker, erste mal poster. Ich habe mehrere Stunden recherche, die versuchen, zu überwinden, die unten problem, offensichtlich ohne Erfolg, wie bin ich hier veröffentlichen. Es sollte angemerkt werden, dass ich nur Codierung mit jQuery(oder ein JS für diese Angelegenheit) für ein paar Monate.
Mein Ziel ist es diese: schreiben Sie ein einfaches Formular mit .ajax () und dann entweder alert(Erfolg!) und true zurück (reload der Seite), wenn der Erfolg kehrte Daten == 'Success', oder füllen Sie ein div mit einer Fehlermeldung und zurück, sonst false.
Habe ich versucht viele verschiedene Ansätze, die ich gefunden bei meinen Recherchen, aber egal was ich probiert habe, bekomme ich eine Auswertung des Erfolgs: Daten true zurück.
Hier ist mein neuester Versuch:
$(document).ready(function() {
$('#error').hide();
$("#submit_result").submit(function() {
var postString = $('#submit_result').formSerialize(); /* Function from jQuery.form.js */
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success: function(msg) {
$('#error').html(msg);
},
error:function() {
$('#error').html('Error validating CLid!');
}
});
if ($('#error').html() == 'Success') {
alert('Done');
return true;
}
$('#error').show();
return false;
});
});
Funktioniert alles Super, außer:
if ($('#error').html() == 'Success') {
alert('Done');
return true;
}
Dieser test nie zu true ausgewertet wird. Ich habe versucht es viele verschiedene Möglichkeiten, einschließlich Dinge wie
if $("#error:contains('Success')") {
Inhalt submit_speedtest.inc.php:
<?php
session_start();
include('lib.inc.php');
restrict_unauthorized();
if(!empty( $_POST['clid'])) {
$clid = trim($_POST['clid']);
$result = check_clid($clid);
echo $result;
}else{
echo "No CLid!";
}
?>
Den check_clid () - Funktion führt eine einfache MySQL-Abfrage, um sicherzustellen, dass CLid vorhanden ist. Wie gesagt, das scheint gut zu funktionieren
Ich hoffe das macht alles Sinn, und ich Schätze jede Hilfe, die stackoverflow-Gemeinschaft bieten kann mir.
Bearbeiten
Danke Euch beiden für euren input. Ich war in der Lage, zu erwerben nützliche Informationen, die sowohl Ihre Antworten. Sie gab mir ein besseres Verständnis, wie die callbacks gearbeitet.
Hier ist der jQuery code, den ich endete mit:
$(document).ready(function() {
$('#status_msg').hide();
$("#submit_result").submit(function(e){
e.preventDefault();
var postString = $('#submit_result').formSerialize();
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success:function(msg) {
$('#status_msg').html(msg);
$('#status_msg').show();
},
error:function() {
$('#status_msg').html('<font color="red">Error validating CLid!</font>');
$('#status_msg').show();
}
});
});
});
PHP macht den rest der Arbeit, und es funktioniert alles einwandfrei.
Nochmals vielen Dank.
InformationsquelleAutor Lance Shaw | 2012-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
$ajax wird asynchrones und deshalb müssen Sie nicht etwas zurückkehren, organisieren Sie Ihren code in einer anderen Art und Weise.
in Ihrem code
wird immer falsch sein, weil es sofort ausgeführt, nachdem der ajax-Funktion aufgerufen wird, ohne auf die Funktion zu vervollständigen. Sie können die
async
Eigenschaftfalse
im$.ajax()
anrufen, um den Anruf synchron, aber dass trotzt der Dienstprogramme von ajaxInformationsquelleAutor Nicola Peluchetti
Ihnen viel Erfolg und error-callbacks werden nicht ausgeführt, bis Sie nach Ihrem abschicken bereits abgeschlossen hat.
Was Sie tun sollten, es ist einfach false zurückgeben, in der submit-callback und führen Sie dann den rest Ihrer Logik in die entsprechende Rückrufe von deinem ajax-request:
InformationsquelleAutor Richard Dalton