Variable innerhalb der getJSON Funktion setzen

Hi,

ich bins wieder ;-)

Ich habe jetzt die Funktion angepasst und CallBack verwendet, aber es funktioniert immer noch nicht richtg...

Aber es ist mir aufgefallen, dass wenn ich eine alert(); ausgebe, dann kann ich auf eine, auf: true gesetzte, Variable
zugreifen und zwar mit dem Wert: true. Wenn ich aber den alert(); entferne, dann ist das ganze einfach zu schnell
und ich habe dann: false, was das Programm daran hindert ausgeführt zu werden... ist ja ein ajax request.

Code:
var setzeVariabe ;
..
 $.getJSON(url,function(data){   
  processMyJson(data);
  });
..

if(MailVal && $mReg.test(MailVal)){
       function processMyJson(data){
          if (data.isMember === 'true') {
                macheWas;
          }
          
          if (data.isMember === 'flase') {
                macheWasAnders;
                setzeVariabe = true;
          }
      }
     return (setzeVariabe) ? true : false;
}

Der button des Forms ist ein submit (type). D.h. es wird versucht das form abzuschicken bei jedem Klick.
Ich habe sogar des return mit setTimeOut zu verzögern, aber es ging auch nicht...

Das Ding treibt mich langsma in den Wahnsinn ,-(

Danke euch und Gruß
Messmar
 
Deine Denkweise ist einfach falsch. Vielleicht wäre es sinnvoll, wenn Du uns erklären würdest, was Du vor hast, und wir können Dir dann exemplarisch skizzieren, wie Du es lösen kannst.
 
Hallo,

das ist ein ganz einfaches Formluar mit den folgenden Feldern: Email, zwei Select (Land und Sprache) und am Ende ein Capcha.

1. es wird erst die email geprüft Syntax auch (mit RegExp)
2. wenn die Email passt, dann wird gecheckt, ob die email in einem Pool (wo die User dann gespeichert werden) schon vorhanden ist oder nicht (member). Da versuche ich in einer Variable (wenn die email neu ist - user noch nicht member -) einen Wert zu speichern... es sollte eine Art von Flag sein.

3. wenn der/die User/Email neu ist, dann geht's zu dem Check der zwei Select (sind pflicht und dürfen nicht leere sein)
4. am Ende wird der Capcha gecheckt, ob das eingegebene Wort richtig ist.

Es geht bis zum Punkt 5, dann kann ich das Formular nicht mehr abschicken, da die Variable (getIt) noch nicht auf true ist... Ajax ist asynchr. Wenn ich aber eine alert kurz vor der Auswertung der Vairable: "getIt", einfüge, dann enthält sie den Wert: "true" und das Form kann abgeschickt werden.

Hierbei der Code, der diesen Fall betrifft... - ich wollte vermeiden hier zu viel Code zu posten - aber ich glaube es ist
besser:

Code:
$(document).ready(function() {
  sjcap('inputCap'); //nur für den Cpacha... wird via ner ander JavaScript Datei generiert.

  var $mReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

  
  checkWord = function(el, btn, btnRem) {
  var $wort;
  $('input[type=text]').each(function() { // textfields click/blur events
  return clickBlur($(this));
  });
  
  btn.click(function() { // form submit button event
  $wort = el.val(); //hier wird das eingegebene Wort in dem Capcha Feld, gespeichert
  var $m = $('.m_ToRegister').val(); //Email Wert
  var $mEr = $('.m_ToRegister').attr('data-err'); //data-Attirbute Wert in dem Email Feld defeniert.
  getIt = false;
  
  if(!$m || $m === $('.m_ToRegister').attr('data-val') || !$mReg.test($m)){
  if($('.mailError').length === 1){
  $('.mailError').html($mEr);
  return false;
  }
  if($('.mailError').length === 0){
  $('.m_ToRegister').after('<label style="clear:both; float:left; color:#ff0000;" class="mailError">' + $mEr + '</label>');
  return false;
  }
  }else {
  $('.mailError').remove();
  }
  
  var gid = $('.gidReg').val(); //hier wird eine ID aus dem Hidden-Feld gespeichert und die ist für den Pool, wo die User landen.
  var m  = $('.m_ToRegister').val();
  var url = "memberSearch/membersearch.jsp?user.Email=" + m + "&group.PK=" + gid;
  $.getJSON(url,function(data){  
  processMyJson(data);
  });   
  
  if($m && $m !== $('.m_ToRegister').attr('data-val') && $mReg.test($m)){
  
  function processMyJson(data){
  if (data.isMember === 'true') {
  if($('.mailError').length === 1){
  $('.mailError').html('Die E-Mail-Adresse ist bereits vorhanden');
  return false;
  }
  if($('.mailError').length === 0){
  $('.m_ToRegister').after('<label style="clear:both; float:left; color:#ff0000;" class="mailError">Die E-Mail-Adresse ist bereits vorhanden</label>');
  return false;
  }
  }
  if (data.isMember === 'false') {
  $('.mailError').remove();
  $('select').each(function(){
  var $sel = $(this);
  //alert($());
  if(!$sel.val()){
  var $cssErr;
  if($sel.attr('name') === 'user.LanguageCode')
  $cssErr = ' style="clear:both; float:left; color:#ff0000;" ';
  else
  $cssErr = ' style="clear:both; float:left; color:#ff0000; margin:0 0 0 250px;" ';
  var $sEr = $(this).attr('data-err');
  if(!$('.selError').length >0){
  $('select[name="user.Countrycode"]').after('<label' + $cssErr + 'class="selError">' + $sEr + '</label>');
  return false;
  }
  }else{ //ab hier wird den Capche gecheckt
  $('.selError').remove();
  if (!$wort) {
  el.css('border', '1px solid #cd0b0b');
  return false;
  } else {
  el.css('border', '1px solid #aaaaaa');
  uword = hex_md5(el.val());
  if (uword === cword[anum - 1]) {
  getIt = true; //diese Variable sollte am Ende wenn alles passt, true sein
  } else {
  var $cEr = $('input[name="uword"]').attr('data-err');
  if(!$('.capError').length >0){
  $('input[name="storeData"]').after('<label style="clear:both; float:left; color:#ff0000; margin:0 0 0 245px;" class="capError">' + $cEr + '</label>');
  return false;
  }
  el.focus();
  return false;
  }
  }
  }
});
  }
  }
         //alert('wenn ich diese alert ausführe, dann ist getiIt am Ende true');
  return (getIt) ? true : false; //leider ist die Varibale hier false
}
  });
  return el, btn;
  };
  
  clickBlur = function(el){
  el.bind({
  click: function(){
  if($(this).val() === $(this).attr('data-val'))
  $(this).val('');
  },
  blur: function(){
        if($(this).val() === '')
        $(this).val($(this).attr('data-val'));
  }
        });
        return el;
  };
return checkWord($('.inputCap'), $('.btnSubmit'));
});

Vielen Dank!
 
Hallo einfach nur Krack,

gefixt... poste morgen ausführlich...

Danke vielmals!... manchmal braucht man nur mit Jemandem anderen darüber zu reden und fällt die Idee/lösung ein ;-)

Gruß
Messmar
 
Hi Leute,

Sry für das verspätete Feedback...

ich habe einfach den Type:
HTML:
submit
für den formular-Button entfernt und das Formular erst nach Erfüllen aller Bedingungen,
anhand von:
HTML:
submit();
abgeschickt.

ich bin auf die Idee scohn am Anfang gekommen, nur ich hatte nicht nur den Type des Buttons entfernt, sondern hatte ich statt den Button
als input-button, einfach ein:
HTML:
<label class="btnSubmit">Submit</label>
eingebettet.

Der Punkt war/ist, dass die Capcha-Funktion dann auch nicht ging, weil die nur auf input-button reagiert, was mich veranlasst hat, es nicht so
(mit label o.Ä.) zu verwenden und bin dann beim
HTML:
<input type="submit"...>
geblieben.

Irgnedwie, bin ich dann auf die Idee gekommen nur das Attribute:
HTML:
type="submit"
vom Button zu entfernen und das
Ganze ma Schluß mit dem: $('.xxxx').submit() auszuporbieren... Es hat geklappt.

P.S. ich weiß, dass der, von mir oben gepostete, Code noch nicht ganz 100%tig sauber und clean... das sind noch die eine oder andere Sache
die man noch optimieren/korrigieren muss, aber der Bug mit Ajax hat mich einfach aufgehalten und genervt.

Danke 1000 Mal für lesen, Mitdenken und die Hilfe!
Messmar
 
PS: Ich wollte mir Dein Skript ansehen, aber da es durch die Indent-Tags so unlesbar ist, habe ich gar nicht erst damit angefangen. Wenn Du das noch ausbessern könntest, würde ich mir Dein Skript sogar wirklich ansehen.
 
Zurück