मैं एक सर्वर से डेटा डाउनलोड करने और डेटा वापस करने की कोशिश कर रहा हूं, लेकिन मैंने जो फ़ंक्शन किया है वह डाउनलोड किए गए डेटा को वापस नहीं कर रहा है। यह वादा लौटाता रहता है, क्या कोई मेरी मदद कर सकता है?

यहाँ कंसोल पर आउटपुट है:

part3-main.js:9 data {readyState: 1, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
part3-application.js:55 Downloading Data
part3-application.js:56 Downloaded Data
part3-application.js:58 parsee (994) [{…},...]
var getAndParseData = function(){
  var download_data = $.ajax({
    url: "https://raw.githubusercontent.com/MUSA611-CPLN692-spring2020/datasets/master/json/philadelphia-crime-snippet.json"
  })
  .done(function(data){
    console.log('Downloading Data');
    console.log('Downloaded Data');
    parsed_data = JSON.parse(data);
    console.log('parsee', parsed_data);
    return parsed_data;
  });
  console.log(download_data);
  return download_data;
};
1
Srikanth Gowda 14 फरवरी 2020, 22:45
getAndParseData हमेशा एक Promise ऑब्जेक्ट लौटाएगा (इसे इसी तरह काम करना चाहिए)। आपको अपना सारा तर्क function(data) कॉलबैक के अंदर रखना होगा जो done कॉल को पास किया गया था।
 – 
Pierre
14 फरवरी 2020, 22:53
$.ajax() वादा वापस करेगा। आप done के अंदर सभी आवश्यक ऑपरेशन कर सकते हैं या आप उस फ़ंक्शन के बाहर getAndParseData.then(d => your operation) का उपयोग कर सकते हैं।
 – 
HelloLinkon
14 फरवरी 2020, 23:05

2 जवाब

क्योंकि $.ajax एक वादा लौटाता है, आपको उसके वापस आने वाले डेटा पर काम करना शुरू करने से पहले उसके हल होने की प्रतीक्षा करनी चाहिए। आप इसे .done() के अंदर कर सकते हैं:

$.ajax({
    url: "https://raw.githubusercontent.com/MUSA611-CPLN692-spring2020/datasets/master/json/philadelphia-crime-snippet.json"
  })
  .done(function(data) {
    let results = JSON.parse(data);
    console.log('Success!', data)
    // do stuff with results here
  })
  .fail(function(error) {
    console.log('something went wrong', error);
  })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0
Juan Marco 14 फरवरी 2020, 23:21

चूंकि अजाक्स कॉल एक वादा देता है, इसलिए आपको इसे हल करने का एक तरीका चाहिए। ऊपर दिए गए कॉलबैक दृष्टिकोण के विकल्प के रूप में आप async/प्रतीक्षा का उपयोग कर सकते हैं। आपको अपनी कोड संरचना से बहुत कुछ बदलने की आवश्यकता नहीं है।

नोट: आपको त्रुटियों को संभालने के लिए एक तरीके की आवश्यकता होगी

var getAndParseData = async function(){
  var download_data = await $.ajax({
    url: "https://raw.githubusercontent.com/MUSA611-CPLN692-spring2020/datasets/master/json/philadelphia-crime-snippet.json"
  })
  
  console.log(download_data)
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0
Henok Teklu 14 फरवरी 2020, 23:35