2011-02-13 15 views
17

मैं jquery AJAX से "पिननंबर" मान कैसे वापस कर सकता हूं ताकि मैं इसे AJAX के बाहर जोड़ सकूं। यहाँ मेरी कोड हैjQuery AJAX वापसी मूल्य

 
var x = pinLast + 1; 
    for(i=x;i<=pinMany;i++) { 
     var i = x++; 
     var cardNumber = i.toPrecision(8).split('.').reverse().join(''); 
     var pinNumber = ''; 

     jQuery.ajax({ 
      type: "POST", 
      url: "data.php", 
      data: "request_type=generator", 
      async: false, 
      success: function(msg){ 
       var pinNumber = msg; 
       return pinNumber; 
       //pin number should return 
      } 
     }); 

     jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+'
'); // the variable pinNumber should be able to go here }

कृपया मुझे पूछते हैं कि आप समझ में नहीं आता .. ^^ धन्यवाद

+3

से करने के लिए उपयोग कर सकते हैं फिर भी एक और "मैं कैसे डेटा से लौटने करते एक एसिंक्रोनस फ़ंक्शन "प्रश्न। इस तरह के सवाल अक्सर पूछे जाते हैं। बंद करने के लिए वोटिंग। –

+0

आप इस सवाल से कैसे हिम्मत करते हैं! मैं इस व्यक्ति को पृथ्वी से हटाने के लिए वोट देता हूं। –

उत्तर

15

AJAX डिफ़ॉल्ट रूप से अतुल्यकालिक है, तो आप एक तुल्यकालिक कॉल करने के बिना कॉलबैक से एक मूल्य वापस नहीं लौट सकते, जो आप लगभग निश्चित रूप से नहीं करना चाहते हैं।

आपको success: हैंडलर को वास्तविक कॉलबैक फ़ंक्शन प्रदान करना चाहिए, और अपना प्रोग्राम तर्क वहां रखना चाहिए।

+0

ओह बहुत बहुत धन्यवाद .. मुझे पहले से ही विचार मिल गया है .. :) AJAX के अंदर मेरी varibles डालकर अंदर अंदर संलग्न करें। – Jorge

+0

मुझे वास्तव में SYNC AJAX में कॉलबैक की आवश्यकता नहीं दिखाई देती है। –

+4

सिंक अजाक्स एक ऑक्सीमोरोन है। और एक्सएचआर सिंक सिंक। – Quentin

4

इसे variable scope के साथ करना है। आपके द्वारा बनाए गए स्थानीय चर pinNumber इसके रैपिंग फ़ंक्शन के बाहर पहुंच योग्य नहीं है।

शायद वैश्विक स्तर पर pinNumber घोषित करें या यदि यह चाल चलती है, तो बस अपने सफल कार्य के अंदर अपने .append() को चिपकाएं।

+3

इसमें परिवर्तनीय दायरे से कोई लेना देना नहीं है; सफल कॉलबैक से पहले '.append' निष्पादित हो रहा है। – meagar

+2

'async' गलत है, जिसका अर्थ है '.append' AJAX कॉल के बाद चलाएगा। – octopi

+0

ओपी को विश्व स्तर पर 'पिन नम्बर' घोषित करने की आवश्यकता नहीं है, सफलता के हैंडलर के अंदर असाइनमेंट में 'var' कीवर्ड का उपयोग न करने के लिए पर्याप्त होगा। असाइनमेंट तब संलग्न क्षेत्र को प्रभावित करेगा। – aaronasterling

5
var pinNumber = $.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator", 
    async: false 
}).responseText; 
jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+' '); 
+2

Pls इसका उपयोग न करें जो भी इसे पढ़ेगा !!! ये गलत है! हमारे प्रोग्रामर अब सोचते हैं कि AJAX इस तरह काम कर रहा है! –

-2

यहां सरल समाधान है।

//---------------------------Ajax class ------------------------------// 
    function AjaxUtil() 
    { 
      this.postAjax = function(Data,url,callback) 
      { 
       $.ajax({ 
       url: url, 
       async: true,  //must be syncronous request! or not return ajax results 
       type: 'POST', 
       data: Data, 
       dataType: 'json', 
       success: function(json) 
       { 
        callback(json); 
       } 
       }); 
      }//--end postAjax 
    } 
    //--------------------------------End class--------------------// 
    var ajaxutil = new AjaxUtil(); 

    function callback(response) 
    { 
      alert(response); //response data from ajax call 
    } 

    var data={}; 
    data.yourdata = 'anydata'; 
    var url = 'data.php'; 

    ajaxutil.postAJax(data,url,callback); 
+0

'async: true' पर आपकी टिप्पणी बस झूठ बोल रही है और किसी अन्य फ़ंक्शन में कॉलबैक लपेटना व्यर्थ है। इसके अलावा, यह अनावश्यक है। इसे कक्षा में लपेटने से सवाल उठाना पड़ता है? –

+0

इनमें से किसी भी के बावजूद वह एकमात्र ऐसा व्यक्ति है जिसने 'सफलता:' के उपयोग का उचित उदाहरण दिया है। स्वीकार्य "उत्तर" भी एक उत्तर नहीं है क्योंकि यह एक उदाहरण नहीं देता है। –

3
var _successEvent = function(response){ 
    $('.pin_generated_table').append(cardNumber + ' = ' + response); 
}; 

$.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator" 
}).done(_successEvent); 
1

आप इस उदाहरण का उपयोग कर सकते हैं:

window.variable = 'some data';

यह आपको वैश्विक चर बनाने के लिए और आप कहीं भी

+0

लेकिन जब कार्यान्वयनकर्ता को पता चलेगा कि 'window.variable' के लिए मान सेट बदल गया है और नए मान के साथ सुलभ है? – ojrask

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