2015-10-07 3 views
5

मेरे पास एक पृष्ठ है जहां मैं कार्ड के नाम दर्ज करता हूं और कार्ड का विवरण AJAX के माध्यम से प्रस्तुत किया जाता है। मैंने इस उदाहरण में बहुत से कोड को हटा दिया है जो इस मुद्दे से प्रासंगिक नहीं है और मैंने इस सरलीकृत कोड का परीक्षण किया है और यह वही त्रुटि उत्पन्न करता है।jQuery AJAX सफलता प्रतिक्रिया के अंदर कॉलिंग फ़ंक्शन एक बार काम करता है लेकिन दो बार नहीं

रहस्यमय बात यह है कि यह testSelectedCardDetails फ़ंक्शन के माध्यम से पहला रन ठीक काम करता है। यह setNameCardIsFromField ठीक कहता है और जो करता है वह करता है। इसके माध्यम से दूसरी बार कंसोल के साथ मर जाता है:

Uncaught TypeError: setNameCardIsFromField is not a function 

इसके साथ क्या चल रहा है? मैं ईमानदारी से इस बारे में पर्याप्त नहीं जानता कि कैसे jQuery समस्या को हल करने में सक्षम होने के लिए काम करता है, इसलिए मैं इस पागलपन से मोक्ष के लिए भीख मांगने वाली स्टैक ओवरफ्लो दुनिया में बदल जाता हूं। जो आम तौर पर बुरा है

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

मान लिया जाये कि यह वैश्विक है():;)

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']); 
      } 
     }); 
    } 

यहाँ समारोह बुलाया जा रहा है:

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; 
      } 
     }); 
    } 

उत्तर

1

आप समारोह के ऊपर लिख।

असंबद्ध, लेकिन async: false का उपयोग करने पर मेह, इसके आसपास हैक करने के बजाय इसे सही करने के लिए बेहतर है, उदाहरण के लिए, कॉलबैक, वादा, जो भी हो।

+0

मैं बहुत नम्र हूँ। मुझे वास्तव में jQuery को ठीक से सीखने की जरूरत है। अभी मैं खुश दुर्घटनाओं की उम्मीद कर रहा हूं और इस तरह से निराश हो जाता हूं। समस्या मेरे पास async के साथ थी: सच है, यह है कि डेटा के साथ काम करने के लिए पर्याप्त तेज़ नहीं है। मैंने इस तरह के मुद्दे के साथ घंटों बिताए और जब मैंने इसे 'झूठी' पर सेट किया तो इसे ठीक कर दिया। क्या करें? मैं चीजों को ठीक से करना चाहता हूं लेकिन ....? – ekendra

+0

@ekendra एक फ़ंक्शन पास करें जिसमें आप 'setNameCardIsFromField' सफलता पर क्या करना चाहते हैं और उसे 'सफलता' हैंडलर में कॉल करें। –

संबंधित मुद्दे