2012-08-11 11 views
25
function ajax_test(str1){ 
    var url = "None" 
    jq.ajax({ 
    type:'post', 
    cache: false, 
    url: 'http://....' + str1, 
    success: function(data, status, xhr){ 
     url=data; 
    }, 
    error: function (xhr, status, e) { 
    }, 
    async: true, 
    dataType: 'json' 
    }); 
    return url 
} 

मैं लौटा हुआ सफलता AJAX डेटा होने के लिए वैश्विक चर url कैसे सेट कर सकता हूं?jquery AJAX कॉल सफलता, मैं रैपर जावास्क्रिप्ट फ़ंक्शन में वैश्विक चर कैसे बदलूं?

+0

सफलता को फेंकने के बाद आपको केवल 'url' के साथ कुछ करने की आवश्यकता है? – NicoSantangelo

+0

यह वैश्विक नहीं है, क्योंकि इसके पास कीवर्ड var है। मुझे लगता है कि आप बाहरी दायरे का मतलब है। – maximus

+0

त्वरित उत्तरों के लिए धन्यवाद! @ मैक्सिमस हां बाहरी गुंजाइश मेरा मतलब है। मेरे पास एक वैध यूआरएल है, मैंने अभी विस्तारित हिस्सा लिया है। – sammiwei

उत्तर

24

जावास्क्रिप्ट में, एक फ़ंक्शन के लिए return असीमित परिणाम के लिए असंभव है। AJAX अनुरोध भी किए जाने से पहले फ़ंक्शन आमतौर पर वापस आ जाएगा।

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

कॉलबैक फ़ंक्शन का उपयोग करके इसके आसपास जाने का मानक तरीका है।

function ajax_test(str1, callback){ 
    jq.ajax({ 
    //... your options 
    success: function(data, status, xhr){ 
     callback(data); 
    } 
    }); 
} 

और फिर आप इसे इस तरह कॉल कर सकते हैं:

ajax_test("str", function(url) { 
    //do something with url 
}); 
+0

यह ओपी विशेष रूप से पूछा नहीं जा सकता है, लेकिन यह चीजों को करने का सही तरीका है। +1 –

+0

आपके पहले 2 पैराग्राफ में कुछ विरोधाभास है। एक असीमित परिणाम लौटना असंभव है [जब तक कि 'async: false' का उपयोग न किया जाए, जिसे तब तक टालना चाहिए जब तक आपके दूसरे पैराग्राफ में समझाया गया हो]। हालांकि यह काफी अच्छी तरह से समझाया गया है। –

+0

@ FabrícioMatté नहीं, यह एक विरोधाभास नहीं है क्योंकि यदि आप 'async: false' का उपयोग करते हैं, तो यह अब अतुल्यकालिक नहीं है। –

2

यहाँ php से डेटा प्राप्त करने के लिए मेरे उदाहरण कोड है, और फिर ajax सफलता समारोह के भीतर एक जावास्क्रिप्ट वैश्विक चर के मूल्य गुजरती हैं। इससे मेरा काम बनता है!

var retVal = null; 

function ajaxCallBack(retString){ 
    retVal = retString; 
} 

function readString(filename){ 
    $.ajax({ 
     type: "POST", 
     url: "readString.php", 
     data: { 'fn': filename },  
     success: function(response){ 
      ajaxCallBack(response); 
     } 
    }); 
} 

PHP कोड (readString.php):

<?php 

    $fn = $_POST['fn']; 

    $file = fopen("path/".$fn.".record","r"); 
    $string = fread($file,filesize("path/".$fn.".record")); 
    fclose($file); 

    echo $string; 
?> 

हालांकि, $ .ajax() में अतुल्यकालिक अनुरोध भेजे, यह सफलता कॉलबैक रन से पहले वापस आ सकते हैं, जिसका मतलब है, तब तक आप पर भरोसा नहीं करना चाहिए यह अनुक्रमिक रूप से चलता है और मूल्य को स्वयं ही वापस कर देता है। इसलिए, यहां हम कॉलबैक फ़ंक्शन में वैश्विक मान के लिए PHP प्रतिक्रिया मान असाइन करते हैं।

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