Ich erhalte immer wieder die Fehlermeldung. Es ist nichts falsch mit dem MYSQL-Teil, die Abfrage wird ausgeführt und ich kann die E-Mail-Adressen in der Datenbank sehen.
Die Client-Seite:
<script type="text/javascript">
$(function() {
$("form#subsribe_form").submit(function() {
var email = $("#email").val();
$.ajax({
url: "subscribe.php",
type: "POST",
data: {email: email},
dataType: "json",
success: function() {
alert("Thank you for subscribing!");
},
error: function() {
alert("There was an error. Try again please!");
}
});
return false;
});
});
</script>
Die Serverseite:
<?php
$user="username";
$password="password";
$database="database";
mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");
$senderEmail = isset( $_POST['email'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email'] ) : "";
if($senderEmail != "")
$query = "INSERT INTO participants(col1 , col2) VALUES (CURDATE(),'".$senderEmail."')";
mysql_query($query);
mysql_close();
$response_array['status'] = 'success';
echo json_encode($response_array);
?>
Antworten:
Sie müssen den richtigen Inhaltstyp angeben, wenn Sie JSON dataType verwenden. Setzen Sie den richtigen Header, bevor Sie den json wiedergeben.
<?php header('Content-type: application/json'); echo json_encode($response_array); ?>
Zusätzlicher Fix, Sie sollten überprüfen, ob die Abfrage erfolgreich ist oder nicht.
if(mysql_query($query)){ $response_array['status'] = 'success'; }else { $response_array['status'] = 'error'; }
Auf der Client-Seite:
success: function(data) { if(data.status == 'success'){ alert("Thank you for subscribing!"); }else if(data.status == 'error'){ alert("Error on query!"); } },
Ich hoffe es hilft.
quelle
success
Teil des AJAX überprüft, um den vom Server gesendeten Wert zu überprüfen (es handelt sich also nicht um einen Übertragungsfehler).Nur damit Sie wissen, können Sie dies zum Debuggen verwenden. Es hat mir sehr geholfen und tut es immer noch
error:function(x,e) { if (x.status==0) { alert('You are offline!!\n Please Check Your Network.'); } else if(x.status==404) { alert('Requested URL not found.'); } else if(x.status==500) { alert('Internel Server Error.'); } else if(e=='parsererror') { alert('Error.\nParsing JSON Request failed.'); } else if(e=='timeout'){ alert('Request Time out.'); } else { alert('Unknow Error.\n'+x.responseText); } }
quelle
Einige Leute empfehlen die Verwendung von HTTP-Statuscodes, aber ich verachte diese Praxis eher. Wenn Sie beispielsweise eine Suchmaschine betreiben und die angegebenen Schlüsselwörter keine Ergebnisse liefern, wird empfohlen, einen 404-Fehler zurückzugeben.
Ich halte das jedoch für falsch. HTTP-Statuscodes gelten für die tatsächliche Browser- <-> Serververbindung. Alles an der Verbindung lief perfekt. Der Browser hat eine Anfrage gestellt, der Server hat Ihr Handler-Skript aufgerufen. Das Skript gab "keine Zeilen" zurück. Nichts in das bedeutet „404 Seite nicht gefunden“ - die Seite WURDE gefunden.
Stattdessen bevorzuge ich die Trennung der HTTP-Schicht vom Status Ihrer serverseitigen Vorgänge. Anstatt einfach Text in einer JSON-Zeichenfolge zurückzugeben, gebe ich immer eine JSON-Datenstruktur zurück, die den Anforderungsstatus und die Anforderungsergebnisse enthält.
zB in PHP hätten Sie
$results = array( 'error' => false, 'error_msg' => 'Everything A-OK', 'data' => array(....results of request here ...) ); echo json_encode($results);
Dann hätten Sie in Ihrem clientseitigen Code
if (!data.error) { ... got data, do something with it ... } else { ... invoke error handler ... }
quelle
Um einen AJAX-Webservice zu erstellen, benötigen Sie ZWEI Dateien:
Rufen Sie zuerst Ihren Webservice mit dieser JQuery-Syntax in der JavaScript-Datei auf:
$.ajax({ url : 'mywebservice.php', type : 'POST', data : 'records_to_export=' + selected_ids, // On fait passer nos variables, exactement comme en GET, au script more_com.php dataType : 'json', success: function (data) { alert("The file is "+data.fichierZIP); }, error: function(data) { //console.log(data); var responseText=JSON.parse(data.responseText); alert("Error(s) while building the ZIP file:\n"+responseText.messages); } });
Ihre PHP-Datei (mywebservice.php, wie im AJAX-Aufruf geschrieben) sollte am Ende so etwas enthalten, um einen korrekten Erfolgs- oder Fehlerstatus zurückzugeben:
<?php //... //I am processing the data that the calling Javascript just ordered (it is in the $_POST). In this example (details not shown), I built a ZIP file and have its filename in variable "$filename" //$errors is a string that may contain an error message while preparing the ZIP file //In the end, I check if there has been an error, and if so, I return an error object //... if ($errors==''){ //if there is no error, the header is normal, and you return your JSON object to the calling JavaScript header('Content-Type: application/json; charset=UTF-8'); $result=array(); $result['ZIPFILENAME'] = basename($filename); print json_encode($result); } else { //if there is an error, you should return a special header, followed by another JSON object header('HTTP/1.1 500 Internal Server Booboo'); header('Content-Type: application/json; charset=UTF-8'); $result=array(); $result['messages'] = $errors; //feel free to add other information like $result['errorcode'] die(json_encode($result)); } ?>
quelle
Hinzufügen zur Top-Antwort: Hier ist ein Beispielcode von PHP und Jquery:
$("#button").click(function () { $.ajax({ type: "POST", url: "handler.php", data: dataString, success: function(data) { if(data.status == "success"){ /* alert("Thank you for subscribing!");*/ $(".title").html(""); $(".message").html(data.message) .hide().fadeIn(1000, function() { $(".message").append(""); }).delay(1000).fadeOut("fast"); /* setTimeout(function() { window.location.href = "myhome.php"; }, 2500);*/ } else if(data.status == "error"){ alert("Error on query!"); } } }); return false; } });
PHP - Benutzerdefinierte Nachricht / Status senden:
$response_array['status'] = 'success'; /* match error string in jquery if/else */ $response_array['message'] = 'RFQ Sent!'; /* add custom message */ header('Content-type: application/json'); echo json_encode($response_array);
quelle
Ich hatte das gleiche Problem. Mein Problem war, dass mein Headertyp nicht richtig eingestellt war.
Ich habe dies gerade vor meinem json-Echo hinzugefügt
header('Content-type: application/json');
quelle
Serverseite:
if (mysql_query($query)) { // ... } else { ajaxError(); }
Client-Seite:
error: function() { alert("There was an error. Try again please!"); }, success: function(){ alert("Thank you for subscribing!"); }
quelle
... Sie möchten möglicherweise auch nach Cross-Site-Scripting-Problemen suchen ... Wenn Ihre HTML-Seiten von einer anderen Domain / Port-Kombination stammen als Ihr Rest-Service, blockiert Ihr Browser möglicherweise den Anruf.
In der Regel klicken Sie mit der rechten Maustaste auf Ihre HTML-Seite. Dann suchen Sie in der Fehlerkonsole nach Fehlern wie
Der Zugriff auf XMLHttpRequest unter '...: 8080' vom Ursprung '...: 8383' wurde durch die CORS-Richtlinie blockiert: Für die angeforderte Ressource ist kein Header 'Access-Control-Allow-Origin' vorhanden.
quelle