2015-10-07 7 views
5

Ich habe eine Seite, wo ich die Namen der Karten eingeben und die Details der Karte werden über AJAX präsentiert. Ich habe eine Menge Code in diesem Beispiel entfernt, das für das Problem nicht relevant ist, und ich habe diesen vereinfachten Code getestet und reproduziert den gleichen Fehler.Aufruf der Funktion in jQuery Ajax Erfolg Antwort funktioniert einmal, aber nicht zweimal

Die mysteriöse Sache ist, dass es den ersten Durchlauf durch die testSelectedCardDetails Funktion gut funktioniert. Es ruft setNameCardIsFromField in Ordnung und macht, was es tun soll. Das zweite Mal durch es stirbt mit der Konsole zeigt:

Uncaught TypeError: setNameCardIsFromField is not a function 

Was ist los? Ich weiß wirklich nicht genug darüber, wie jQuery funktioniert, um das Problem zu lösen, also wende ich mich an die Stackoverflow-Welt, die um Rettung aus diesem Wahnsinn bittet. ;)

function testSelectedCardDetails(cardName) { 

     var cardTestInfoArray = []; 

     $.ajax({ 
      url: 'includes/getCardAndSetDataViaAJAX.php',   
      type: 'POST', 
      cache: false, 
      async: false, // if set to true then the data doesn't get here fast enough to run commands in 'success' 
      dataType: 'json', 
      data: { callThis: "testSelectedCardDetails", thisCardName: cardName}, 
      error: function(data){ 
       console.log("AJAX failed to get card info."); 
      }, 
      success: function(data) {     

       $.map(data, function (value) { cardTestInfoArray = value; }); 
       cardPresentInfo['printings'] = cardTestInfoArray['printings']; 

       //automatically set setNameCardIsFrom field 
       setNameCardIsFromField(cardPresentInfo['printings']); 
      } 
     }); 
    } 

Hier ist die Funktion aufgerufen wird:

setNameCardIsFromField = document.querySelector('#setNameCardIsFrom'); 

es ist global Unter der Annahme (die in der Regel schlecht ist):

function setNameCardIsFromField(setCode) { 

     $.ajax({ 
      url: 'includes/getCardAndSetDataViaAJAX.php',   
      type: 'POST', 
      cache: false, 
      async: false, // if set to true then the data doesn't get here fast enough to run commands in 'success' 
      dataType: 'text', 
      data: { callThis: "setNameCardIsFromField", thisSetCode: setCode}, 
      error: function(data){ 
       console.log("AJAX failed to get card info."); 
      }, 
      success: function(setName) { 
       //console.log(setName); 
       setNameCardIsFromField = document.querySelector('#setNameCardIsFrom'); 
       setNameCardIsFromField.value = setName; 
      } 
     }); 
    } 

Antwort

1

Sie die Funktion überschreiben.

Unrelated, aber meh on async: false, besser, es richtig zu tun als um es zu hacken, z. B. Rückruf, Versprechen, was auch immer.

+0

Ich bin so demütig. Ich muss wirklich jQuery richtig lernen. Im Moment hacke ich einfach weg und hoffe auf glückliche Unfälle und werde so oft frustriert. Das Problem, das ich mit async hatte: stimmt, ist, dass die Daten nicht schnell genug sind, um damit zu arbeiten. Ich habe Stunden mit einem solchen Problem verbracht und als ich es auf "falsch" gesetzt habe, habe ich es behoben. Was ist zu tun? Ich würde gerne Dinge richtig machen, aber ....? – ekendra

+0

@ekendra Übergeben Sie eine Funktion, die das enthält, was Sie tun möchten, an 'setNameCardIsFromField' und rufen Sie sie im' success'-Handler auf. –

Verwandte Themen