Ich habe heute mit jQuery und AJAX ein Skript geschrieben und erhalte einige Fehler ...
Das Skript:
function changeAdmin(id) {
$(document).ready(function() {
$('#ta-modarea-'+id).fadeOut('fast');
$('#ta-m-loading-'+id).fadeIn('fast');
$.ajax({
type: 'POST',
url: 'ajax_utf.php?a=changeteamadmin',
dataType: 'json',
data: {
admin : $('#admin-id-'+id).val()
},
success: function(data) {
$('#ta-m-loading-'+id).fadeOut('fast');
$('#ta-modarea-'+id).text(data.msg).fadeIn('fast');
},
error: function(jqXHR, textStatus, errorThrown) {
$('#ta-m-loading-'+id).fadeOut('fast');
$('#ta-modarea-'+id).text('HTTP Error: '+errorThrown+' | Error Message: '+textStatus).fadeIn('fast');
}
});
return false;
});
}
Nach dem Lauf erhalte ich folgende Fehlermeldung: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror
Könnten Sie mir helfen, was soll ich tun?
Sie müssen einen application/json
-Header über PHP senden, wie folgt:
header('Content-type: application/json');
Das liegt daran, dass jQuery einen Accept-Header (application/json, text/javascript
) sendet, und dies ist die Ursache für parseerror
, die von jqXHR
ausgelöst wird.
Versuchen
alert( jqXHR.responseText);
in deiner Fehlerfunktion
Wenn Sie versucht haben, den Inhaltstyp des Headers festzulegen, wird der Fehler immer noch angezeigt. Ich erwarte, dass der Server mit einem Fehler in Ihrem serverseitigen Code antwortet. Wenn eine Debug-Nachricht ausgegeben wird, handelt es sich in der Regel nicht um JSON, sondern um ein unerwartetes Token.
Der schnellste Weg zum Debuggen ist das Festlegen des Datentyps des HTML-Codes anstelle von JSON, sodass Sie die Ausgabe des Servers sehen können, nicht nur JSON-formatierte Daten.
Wenn Sie den durch Ihren serverseitigen Code hervorgerufenen Fehler erkannt und behoben haben, können Sie wieder zu einem Datentyp von JSON werden.
Versuchen Sie den Code unten, aber wenn Sie eine Fehlermeldung wie "Unerwartetes Token <" erhalten, müssen Sie Ihre PHP-Datei "ajax_utf.php" überprüfen und überprüfen, was im Browser zurückgegeben wird (Chrome). Ansicht-> Entwickler-> Entwickler-Tools, Netzwerk tab -> XHR.
$.ajax({
type: 'post',
url: postLink,
dataType: 'json',
data: postData,
beforeSend: function (x) {
if (x && x.overrideMimeType) {
x.overrideMimeType('application/json;charset=UTF-8' );
}
},
success: function (result) {
//console.log(result);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(arguments);
}
});
contentType: "application/json; charset = utf-8",
Es könnte ein Problem mit missmatchenden PHP assoziativen/numerischen Arrays und Javascript-Objekten sein.
Versuche dies:
$data = new Array();
$data['test'][] = "Row 1";
$data['test'][] = "Row 2";
echo json_encode($json, JSON_FORCE_OBJECT);
Dies sollte den json-Encoder zwingen, immer in Objekte anstelle von numerischen Arrays zu codieren, wodurch das Problem möglicherweise gelöst wird.