webForumDet fria alternativet

Problem med att returnera värde

4 svar · 496 visningar · startad av Trankan

TrankanMedlem sedan okt. 2006129 inlägg
#1

Hej!

Jag har ett formulär som anropar funktionen checkForm() när det skickas. En PHP-fil validerar då formuläret och tanken är att funktionen ska returnera true om inget felmeddelande skrivs ut, annars false. Beroende på vilket värde som returneras så fortsätts eller avbryts den submit som pågår. Problemet är att jag inte kan få värdet från stateChanged() att bli det värde som returneras av checkForm(). Är väldigt ny på den här typen av JavaScript så den kod jag använder har jag i princip bara klistrat in. Vet någon av er hur det här kan lösas?

function checkForm() {
  xmlHttp=GetXmlHttpObject();
  if (xmlHttp==null) {
    alert ("Browser does not support HTTP Request")
    return
  }
  
  var url="check_form.php";
  xmlHttp.onreadystatechange=stateChanged;
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

function stateChanged() {
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
    if (xmlHttp.responseText == "")
      return true;
    else
      return false;
  }
}

function GetXmlHttpObject() {
  var xmlHttp=null;
  try {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }
  catch (e) {
    //Internet Explorer
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}
effataMedlem sedan apr. 2008141 inlägg
#2

Problemet är att xmlHttp-anropet körs i en separat tråd, så därför kan du inte på traditionellt sätt returnera ett värde i checkForm.
Det jag skulle gjort är att checkForm alltid avbryter submit. Och att du sen i stateChanged submittar igen eller visar ett felmeddelande.

TrankanMedlem sedan okt. 2006129 inlägg
#3

Det är faktiskt just så jag har det i nuläget, men det gör att det åtminstone genom PHP blir svårare att se om formuläret skickats. I vanliga fall hade jag kollat om submit-knappen tryckts ner, men det fungerar ju inte nu eftersom jag genom JavaScript säger åt formuläret att skickas. Därför måste jag kolla alla POST-värden som formuläret skickar, och om de inte är tomma så är formuläret skickat. Tyckte att det verkade som en lite onödigt krånglig lösning men den kanske är okej trots alls, såvida ingen annan har något bättre förslag? I vilket fall, tack för svaret. :)

effataMedlem sedan apr. 2008141 inlägg
#4

Ha en hidden input som du ändrar värdet på när javascriptverifieringen har gjorts?
Alternativet skulle vara att köra hela postningen via javascript, dvs spara infon direkt i scriptet som verifierar input, och sen bara köra en javascript-redirect on success.

Vet inte om jag missuppfattar nu, men du borde verkligen verifiera din input ordentligt vid post också och inte bara med javascript. Vad händer t.ex. om användaren har javascript avstängt och skriver felaktigheter/fulheter i formuläret?

TrankanMedlem sedan okt. 2006129 inlägg
#5

Har redigerat mitt andra inlägg lite, var inte helt lätt att beskriva problemet på ett bra sätt. I vilket fall så har jag förutom den här valideringen en till. Den är i enbart PHP och körs oavsett om användaren har JavaScript aktiverat eller inte.

Genererad på 382 ms · cache AV · v20260730165559-full.f96bc7eb