javascript - Ajax suksesshendelse fungerer ikke
Jeg har et registreringsskjema og bruker $.ajax for å sende det inn.
Dette er min AJAX-forespørsel:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
I min submit1.php-fil sjekker jeg om feltene e-postadresse og brukernavn eksisterer i databasen. Jeg ønsker å vise en feilmelding hvis disse verdiene eksisterer uten å oppdatere siden.
Hvordan kan jeg legge dette til i success-tilbakekallingen av AJAX-forespørselen min?
Svar #1
Resultatet er sannsynligvis ikke i JSON-format, så når jQuery prøver å analysere det som JSON, feiler det. Du kan fange feilen med error:-tilbakeroppsfunksjonen.
Det ser uansett ikke ut til at du trenger JSON i den funksjonen, så du kan også fjerne raden dataType: 'json'.
Svar #2
Selv om problemet allerede er løst, legger jeg til dette i håp om at det vil hjelpe andre.
Jeg gjorde feilen å prøve å bruke en funksjon direkte slik (success: OnSuccess(productID)). Men du må først sende en anonym funksjon:
function callWebService(cartObject) {
$.ajax({
type: "POST",
url: "http://localhost/AspNetWebService.asmx/YourMethodName",
data: cartObject,
contentType: "application/x-www-form-urlencoded",
dataType: "html",
success: function () {
OnSuccess(cartObject.productID)
},
error: function () {
OnError(cartObject.productID)
},
complete: function () {
// Handle the complete event
alert("ajax completed " + cartObject.productID);
}
}); // end Ajax
return false;
}
Hvis du ikke bruker en anonym funksjon som en wrapper, blir OnSuccess kalt selv om webtjenesten returnerer en unntak.
Svar #3
Jeg prøvde å fjerne dataType-raden, og det fungerte ikke for meg. Jeg løste problemet ved å bruke "complete" i stedet for "success" som callback. Success-callbacken feiler fortsatt i IE, men siden skriptet mitt kjører og fullføres uansett, er det alt jeg bryr meg om.
$.ajax({
type: 'POST',
url: 'somescript.php',
data: someData,
complete: function(jqXHR) {
if(jqXHR.readyState === 4) {
... run some code ...
}
}
});
I jQuery 1.5 kan du også gjøre det på denne måten.
var ajax = $.ajax({
type: 'POST',
url: 'somescript.php',
data: 'someData'
});
ajax.complete(function(jqXHR){
if(jqXHR.readyState === 4) {
... run some code ...
}
});
Svar #4
Sørg for at du ikke skriver ut (echo eller print) noen tekst/data før du genererer dine JSON-formaterte data i PHP-filen din. Det kan forklare at du får en -vellykket 200 OK- men at suksesshendelsen din fortsatt feiler i JavaScript. Du kan sjekke hva skriptet ditt mottar ved å sjekke seksjonen "Network - Answer" i Firebug for POST submit1.php.
