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.

Relaterte artikler