Ich erhalte ständig 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);
?>
Sie müssen den richtigen Inhaltstyp angeben, wenn Sie JSON-Datentyp verwenden. Bevor Sie den Json wiederholen, setzen Sie den richtigen Header.
<?php
header('Content-type: application/json');
echo json_encode($response_array);
?>
Zusätzlich sollten Sie überprüfen, ob die Abfrage erfolgreich ist oder nicht.
if(mysql_query($query)){
$response_array['status'] = 'success';
}else {
$response_array['status'] = 'error';
}
Auf der Kundenseite:
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.
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);
}
}
Einige Leute empfehlen die Verwendung von HTTP-Statuscodes, aber ich verachte diese Praxis eher. z.B. Wenn Sie eine Suchmaschine verwenden und die bereitgestellten Schlüsselwörter keine Ergebnisse haben, würde der Vorschlag die Fehlermeldung 404 ausgeben.
Ich halte das jedoch für falsch. HTTP-Statuscodes gelten für die tatsächliche Verbindung des Browsers <-> Server. Alles an der Verbindung lief perfekt. Der Browser hat eine Anforderung gestellt, der Server hat Ihr Handler-Skript aufgerufen. Das Skript gab 'keine Zeilen' zurück. Nichts in dem bedeutet "404 Seite nicht gefunden" - die SeiteWURDEgefunden.
Stattdessen möchte ich die HTTP-Schicht vom Status Ihrer serverseitigen Vorgänge trennen. Anstatt einfach etwas Text in einer Json-Zeichenfolge zurückzugeben, gebe ich immer eine JSON-Datenstruktur zurück, die den Anfragestatus und die Anforderungsergebnisse enthält.
z.B. 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 in Ihrem clientseitigen Code, den Sie hätten
if (!data.error) {
... got data, do something with it ...
} else {
... invoke error handler ...
}
Um einen AJAX Webservice zu erstellen, benötigen Sie ZWEI Dateien:
Sie rufen also 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 Aufruf von AJAX geschrieben) sollte am Ende ein ähnliches Element enthalten, um einen korrekten Status für Erfolg oder Fehler anzuzeigen:
<?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));
}
?>
Ich hatte das gleiche Problem. Mein Problem war, dass mein Header-Typ nicht richtig eingestellt wurde.
Ich habe dies vor meinem Json-Echo hinzugefügt
header('Content-type: application/json');
zur ersten Antwort hinzufügen: 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);
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!");
}