2009-08-07 22 views
8

jQuery.get() से प्रतिक्रिया को एक वैरिएबल को असाइन करने का सही तरीका क्या है?एक चर के लिए jQuery.get() असाइन करें?

var data = jQuery.get("output.csv"); 

मैं पढ़ रहा था कि jQuery.get() में कॉलबैक फ़ंक्शन होना चाहिए? ऐसा क्यों है? और डेटा वैरिएबल पर प्रतिक्रिया वापस करने के लिए मैं इस कॉलबैक फ़ंक्शन का उपयोग कैसे करूं?

आपकी सहायता और स्पष्टीकरण के लिए अग्रिम धन्यवाद।

अद्यतन:

आप सभी अपने जवाब और स्पष्टीकरण के लिए धन्यवाद। मुझे लगता है कि मैं आखिरकार समझ रहा हूं कि आप क्या कह रहे हैं। नीचे मेरा कोड सही चीज़ कर रहा है केवल इसका पहला पुनरावृत्ति। शेष पुनरावृत्तियों पृष्ठ पर इसके लेखन को अपरिभाषित। क्या मुझे कुछ याद आ रही है?

<tbody> 
<table id="myTable"> 

    <script type="text/javascript"> 

     $.get('output.csv', function(data) { 
       csvFile = jQuery.csv()(data); 

       for (var x = 0; x < csvFile.length; x++) { 
        str = "<tr>"; 
        for (var y = 0; y < csvFile.length; y++) { 
         str += "<td>" + csvFile[y][y] + "</td>"; 
        } 
        str += "</tr>"; 
       } 
       $('#myTable').append(str); 


     }); 

    </script> 

</tbody> 
</table> 

उत्तर

1

आपको विधि प्राप्त करने के लिए पैरामीटर में कॉलबैक फ़ंक्शन निर्दिष्ट करने की आवश्यकता है। आपका डेटा उस चर में होगा जो आप फ़ंक्शन में निर्दिष्ट करते हैं।

$.get("output.csv", function(data) { 
    // Put your function code here, the 'data' variable will hold your data. 
}); 
8

एजेक्स जीईटी अनुरोध की तरह एसिंक्रोनस फ़ंक्शन कॉल के लिए एक कॉलबैक फ़ंक्शन आवश्यक है। get फ़ंक्शन को कॉल करने और प्रतिक्रिया प्राप्त करने के बीच में देरी हो रही है, जो मिलीसेकंड या कई मिनट हो सकती है, इसलिए आपको कॉलबैक फ़ंक्शन होना चाहिए जिसे एसिंक्रोनस जीईटी ने अपना काम पूरा कर लिया हो।

यहां jQuery की AJAX get फ़ंक्शन पर कुछ और जानकारी है: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

jQuery के उदाहरण से:

// this would call the get function and just 
// move on, doing nothing with the results 
$.get("test.php"); 

// this would return the results of the get 
$.get("test.php", function(data){ 
    alert("Data Loaded: " + data); 
}); 

आप undefined मिलता है जब आप कॉलबैक फ़ंक्शन में data चर का उपयोग करने का प्रयास करें, Firefox में Firebug में कंसोल खुल जाएगा और get अनुरोध को देखते हैं। आप कच्चे अनुरोध और प्रतिक्रिया के साथ वापस आ सकते हैं। सर्वर पर क्या भेजा जा रहा है और क्लाइंट को वापस भेजा जा रहा है यह देखने के बाद आपको इस मुद्दे का बेहतर संकेत मिलना चाहिए।

+0

हां, तो कैसे आप अपरिभाषित हो रही workaround है:

यहाँ काम कर रहे स्क्रिप्ट का एक उदाहरण है? –

+0

मैंने डेटा उत्तर को अपरिभाषित करने में समस्या निवारण में सहायता के लिए एक टिप के साथ अपना जवाब अपडेट कर दिया है। –

+0

@DCrawmer जांचें कि कौन सी पिक्सेललाइन कह रही है। यदि अनुरोध प्राप्त करने का पार्स कॉलबैक में डेटा लेने के लिए बहुत अधिक लेना बेहतर है। वास्तव में यह करने का सही तरीका है। –

3

असल में आपके उदाहरण में डेटा XMLHttpRequest अनुरोध ऑब्जेक्ट होगा।

var x; 
$.get('output.csv', function(data){ 
    x = data; 
    console.log(x); // will give you the contents. 
}); 
+0

दिया गया (मेरी समझ में) कि 'get' एसिंक्रोनस है, क्या' लॉग 'हर बार' अपरिभाषित 'प्रिंट नहीं करेगा? –

+0

हाँ, यह कोड मुझे हर बार अपरिभाषित कर रहा है, मैं इसे कैसे रोकूं? –

+1

कॉलबैक के अंदर console.log() कॉल डालें! – pixeline

3

tsvanharen ने सवाल का जवाब दिया, लेकिन DCrawmer अभी भी बिंदु खो रहा है। मुझे उसके लिए स्पष्टीकरण देने का प्रयास करें। मैं इनमें से कुछ को अधिक बढ़ा रहा हूं, और कुछ विवरणों पर चिकनाई कर रहा हूं।

नीचे दिखाए गए कोड को देखें। यह काफी, tsvanharen के रूप में एक ही कोड है, सिवाय इसके कि मैं एक वास्तविक समारोह सूचक के साथ कॉलबैक के लिए गुमनाम समारोह बदल दिया है, और एक छोटे से अधिक स्पष्ट कर रहा हूँ ताकि आप देख सकते हैं क्या हो रहा है:

var x = null; 

function myCallback(data) 
{ 
    alert("Data Loaded:" + data); 
} 

$.get("test.php", myCallback); 

// the rest of your code 
alert("The value of X is: " + x); 

मान लिया जाये कि test.php, लोड आदेश सूचना के लिए भी एक पल या दो लेता है कि अलर्ट शायद में आ: $.get() रन तत्क्षण

1. "The value of X is" 
2. "Data Loaded" 

कार्य करते हैं। जावास्क्रिप्ट आगे बढ़ता है और आपके बाकी कोड को तुरंत चलाता है।पृष्ठभूमि में, यह test.php पर आपका पृष्ठ पुनर्प्राप्त कर रहा है। jQuery इस के कुछ गन्दा विवरण छुपाता है।

कॉलबैक फ़ंक्शन ($.get() पर दूसरा तर्क) बाद में चलता है (असीमित रूप से)। या, एक और तरीका कहा, समारोह myCallback एक घटना के लिए एक हैंडलर है। वह घटना "$.get() डेटा पुनर्प्राप्त कर चुकी है"। यह उस बिंदु तक नहीं चलता है। $.get() रनों पर यह नहीं चलता है! $.get() बस याद करता है कि वह फ़ंक्शन बाद में कहां है।

फ़ंक्शन myCallback मिलीसेकंड या मिनट बाद चला सकता है, $.get() के बाद लंबे समय से निपटाया गया है।

यदि myCallback मिनटों तक नहीं चलता है, तो "एक्स का मान" कोड चलाए जाने पर x का मान क्या है? यह अभी भी null है। आपकी बग है।

अपनी स्क्रिप्ट में डेटा पेज से लिया गया उपयोग करने के लिए, तो आप इस तरह के और अधिक काम करने के लिए है:

  1. , अपनी स्क्रिप्ट शुरू अपने चर घोषित डेटा रखने के लिए।
  2. कॉल $.get() पर कॉल करें, रिटर्न को संभालने के लिए कॉलबैक फ़ंक्शन के साथ।
  3. कुछ और नहीं करें। [या, कम से कम, कुछ भी जिसके लिए डेटा की आवश्यकता नहीं है] पृष्ठ को बस वहां बैठने दें।

    ... भविष्य में कभी ...

    एक्स आपका कॉलबैक समारोह रन मिलता है, और अपने वेब पेज के परिणाम होगा। आपका कॉलबैक फ़ंक्शन: * डेटा प्रदर्शित करें * उस डेटा को एक चर पर असाइन करें * अन्य कार्यों को कॉल करें * इसके आनंददायक तरीके से जाएं।

+0

में लॉग बेहतर होता है स्पष्टीकरण के लिए आपको बहुत बहुत धन्यवाद। कृपया प्रश्न के लिए मेरा अपडेट देखें और मुझे बताएं कि मैं क्या गलत कर रहा हूं? आपके सहयोग के लिए धन्यवाद। –

+0

विभाजित करें और जीतें। सुनिश्चित करें कि jQuery.get वास्तव में उस डेटा को वापस कर रहा है जिसे आप सोचते हैं। फ़ंक्शन की शुरुआत में एक चेतावनी (डेटा) रखें ताकि यह सुनिश्चित किया जा सके कि डेटा output.csv से सही ढंग से पढ़ा गया हो। (यह एक अच्छी तरह से गठित यूआरएल नहीं है, क्या आप वाकई यही चाहते हैं कि आप चाहते हैं?) वहां से आगे बढ़ें। –

3

मैं वास्तव में घटनाओं के "document.ready" चरण में अपने चर में jQuery AJAX के परिणाम प्राप्त करने के साथ संघर्ष कर रहा था।

jQuery के AJAX मेरे चर में लोड हो जाएगा जब उपयोगकर्ता ने पहले ही लोड होने के बाद एक चुनिंदा बॉक्स के "ऑनचेंज" ईवेंट को ट्रिगर किया था, लेकिन डेटा पहले लोड होने पर चर को फ़ीड नहीं करेगा।

मैं कई, कई, कई अलग अलग तरीके की कोशिश की, लेकिन अंत में, इस सवाल का जवाब मैं जरूरत इस stackoverflow पेज पर था: JQuery - Storing ajax response into global variable

योगदानकर्ता चार्ल्स Guilbert के लिए धन्यवाद, मैं अपने चर में डेटा प्राप्त करने में सक्षम हूँ, यहां तक ​​कि जब मेरा पृष्ठ पहले लोड होता है।

jQuery.extend 
    (
     { 
      getValues: function(url) 
      { 
       var result = null; 
       $.ajax(
       { 
       url: url, 
       type: 'get', 
       dataType: 'html', 
       async: false, 
       cache: false, 
       success: function(data) 
       { 
        result = data; 
       } 
       }); 
      return result; 
      } 
     } 
    ); 

// Option List 1, when "Cats" is selected elsewhere 
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats"); 

// Option List 1, when "Dogs" is selected elsewhere 
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs"); 

// Option List 2, when "Cats" is selected elsewhere 
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats"); 

// Option List 2, when "Dogs" is selected elsewhere 
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs"); 
संबंधित मुद्दे