J'ai écrit un script en utilisant jQuery et AJAX aujourd'hui, et j'ai quelques erreurs ...
Le scénario:
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;
});
}
Après l'exécution, je reçois le message d'erreur suivant: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror
Pourriez-vous m'aider, que dois-je faire?
Vous devez envoyer un en-tête application/json
via PHP, comme ceci:
header('Content-type: application/json');
En effet, jQuery envoie un en-tête Accept (application/json, text/javascript
), ce qui est à l'origine de parseerror
déclenché par jqXHR
.
Essayer
alert( jqXHR.responseText);
dans votre fonction d'erreur
Si vous avez essayé de définir le type de contenu de l'en-tête et obtenez toujours l'erreur. Je m'attends à ce que le serveur réponde avec une erreur de votre code côté serveur. Habituellement, lorsqu'un message de débogage est donné, il s'agit en HTML pur et non en JSON, donc du jeton inattendu.
Le moyen le plus rapide de déboguer cela consiste à définir le type de données du type HTML au lieu de JSON afin que vous puissiez voir la sortie du serveur, pas seulement les données au format JSON.
Une fois que vous avez vu et corrigé l'erreur générée par votre code côté serveur, vous pouvez redevenir un DataType de JSON.
Essayez le code ci-dessous, mais si vous recevez une erreur du type "Jeton inattendu <", vous devez vérifier votre fichier php - "ajax_utf.php" et vérifier ce qui est renvoyé dans le navigateur (Chrome) Affichage-> Développeur-> Outils de développement, Réseau onglet -> 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",
Il pourrait s'agir d'un problème de correspondance inexacte PHP de tableaux associatifs/numériques et d'objets Javascript.
Essaye ça:
$data = new Array();
$data['test'][] = "Row 1";
$data['test'][] = "Row 2";
echo json_encode($json, JSON_FORCE_OBJECT);
Cela devrait obliger l'encodeur JSON à toujours encoder des objets plutôt que des tableaux numériques, ce qui pourrait résoudre le problème.