এ্যাসিঙ্ক সেট করা কি সম্ভব: get .getJSON কল থেকে মিথ্যা


105

async: falseকল করার সময় কি সেট করা সম্ভব হয় $.getJSON()যাতে কল অ্যাসিঙ্ক্রোনাস হওয়ার চেয়ে ব্লক হয়ে যায়?


1
কলব্যাকে কেবল আপনার কোডটি রেখে দিন .... একটি কারণ রয়েছে যা এটি
অবমূল্যায়ন

1
@ মিলনি - খুব আজব… সরকারীভাবে, এটি অবমূল্যায়ন করা হয়েছে; আসলে, এটা না । যদি এটি সত্যই অবনতি হয় তবে একটি সিঙ্ক এজেএক্স কল বা একটি j ajax.setup সুইচ করার সম্ভাবনাটি jQuery 3 এ বাদ পড়ে যেত, প্রকৃতপক্ষে, একটি সিঙ্ক কলটি মাঝেমধ্যে খুব দরকারী, উদাহরণস্বরূপ গ্লোবালগুলির সাথে সূচনা করার ক্ষেত্রে JSON ডেটা, যখন আপনার কাছে অন্যান্য গ্লোবাল থাকে যা প্রথম ব্যাচে নির্ভর করে। (কলব্যাক ফাংশনে পুরো
ইনিশিয়েশন প্রক্রিয়াটি প্যাক করা

উত্তর:


154

আপনার $.ajax()কাছে এটির জন্য সিঙ্ক্রোনালিভাবে কলটি করতে হবে:

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
    //...
  }
});

এটি বর্তমানে এটির $.getJSON()মতো ব্যবহার করে মিলবে :

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});

23
আমি কখনই সুবিধাজনক পদ্ধতিটি খুঁজে পেয়েছি get .জেটজেসন () প্রায় কখনই কার্যকর না হওয়া এবং সর্বদা $ .জ্যাক্স () ব্যবহার করে শেষ করতে পারি।
জ্যাকব মার্বেল

পোস্ট পোস্টের জন্যও কি আমি এটি ব্যবহার করতে পারি?
हितেশ

@ হিটেশ হ্যাঁ, আপনি type: 'POST'এটিকে একটি পোস্টে পরিণত করার পাশাপাশি একটি বিকল্প যুক্ত করতে চাইবেন - যদিও async: falseআপনার সত্যিকারের প্রয়োজন না হলে আপনি ব্যবহার করতে চান না - এটি ইউআই লকআপ করবে।
নিক Craver

1
এক্ষেত্রে 'মাইডাটা' হওয়ার কথা কী? আমি যখন ডেটা মুছব: আমার ডেটা সম্পূর্ণরূপে এটি কাজ করে .. এজ্যাক্স কলগুলিতে মোটামুটি নতুন!
nclsvh

2
কেবলমাত্র নিম্নলিখিত নতুন সমস্যার মধ্যে আবদ্ধ: "কর্মীদের বাইরে সিঙ্ক্রোনাস এক্সএমএলএইচটিএইচপিস্ট ওয়েব প্ল্যাটফর্ম থেকে অপসারণের প্রক্রিয়াতে রয়েছে কারণ এটির ব্যবহারকারীর অভিজ্ঞতার ক্ষতিকারক প্রভাব রয়েছে ((এটি একটি দীর্ঘ প্রক্রিয়া যা অনেক বছর সময় নেয়)) বিকাশকারীদের অবশ্যই অ্যাসিঙ্ক আর্গুমেন্টের জন্য মিথ্যা পাস করবেন না যখন এন্ট্রি সেটিংস আইটেমের গ্লোবাল অবজেক্টটি উইন্ডো অবজেক্ট হয় User ব্যবহারকারী এজেন্টরা বিকাশকারী সরঞ্জামগুলিতে এই জাতীয় ব্যবহার সম্পর্কে সতর্ক করতে উত্সাহিত হয় এবং এটি ঘটে গেলে একটি অবৈধ-অ্যাক্সেসরর ব্যতিক্রম ছোঁড়ার পরীক্ষা করতে পারে ""
কেন শার্প

46

উভয় উত্তর ভুল। আপনি পারেন। আপনাকে কল করা দরকার

$.ajaxSetup({
async: false
});

আপনার json আজাক্স কল আগে। এবং আপনি কল পুনরায় সংঘর্ষের পরে এটিকে সত্যতে সেট করতে পারেন (যদি পৃষ্ঠায় অজ্যাক্সের অন্যান্য ব্যবহারগুলি থাকে তবে আপনি যদি এ্যাসএনসি চান তবে)


1
আমি ডক্সের সেই অংশটি আবার পড়ি। এখানে অজ্যাক্সেটআপ সম্পর্কে কথা বলা অংশটি রয়েছে: api.jquery.com/jQuery.ajaxSetup এবং এখানে অপশনগুলি রয়েছে: api.jquery.com/jQuery.ajax এটি স্পষ্টভাবে বলেছে: "অ্যাসিঙ্ক ডিফল্ট: সত্য ডিফল্টরূপে, সমস্ত অনুরোধগুলি অ্যাসিঙ্ক্রোনালি পাঠানো হয় ( যেমন এটি ডিফল্ট হিসাবে সত্যে সেট করা আছে) আপনার যদি সিঙ্ক্রোনাস অনুরোধগুলির প্রয়োজন হয় তবে এই বিকল্পটি মিথ্যাতে সেট করুন Cross ক্রস-ডোমেন অনুরোধ এবং ডেটা টাইপ: "জসনপ" অনুরোধগুলি সিঙ্ক্রোনাস অপারেশন সমর্থন করে না "" জেএসএনপি জেএসএন নয় তাই আমি এখনও মনে করি আমি আছি ঠিক প্রথম থেকেই। আমি কিছু সময় পেলে উদাহরণ লিখব।
ভেলজা

7
এটি একটি দেরিতে মন্তব্য কিন্তু ... "দুটি" উত্তরগুলি ভুল যা? @ নিক ক্র্যাভারের উত্তর আমি উভয়ই গ্রহণযোগ্য এবং বৈশ্বিক এজেএক্স সেটিংসের সাথে "গণ্ডগোল" না হওয়ার উত্তর দেখতে পাচ্ছি (অন্য অনুরোধগুলি একই সময়ে গুলি চালানো উচিত)
স্কানলিফ

1
এটি কাজ করে, তবে এটি আপনি পৃষ্ঠায় যে সমস্ত এজাক্স অনুরোধগুলি করেছেন তা প্রয়োগ করে। সুতরাং আমি
ডাউনটাতে

3
এটি খুব নিম্ন মানের উত্তর
ব্রায়ান ওয়েবস্টার

1
-1: জিনিসগুলি সিঙ্ক্রোনাস করা ব্যয়বহুল হতে পারে। আপনার প্রকল্পটি প্রতিবার একেবারে প্রয়োজন না হলে আপনার প্রতি অবশ্যই প্রতিটি কল-ভিত্তিতে এটি করা উচিত। আপনার উত্তর প্রস্তাব করে যে আপনি বিশ্বব্যাপী করা সমস্ত কল কনফিগার $.ajax(এবং পরবর্তী সাধারণভাবে সংক্ষেপে চাদরে অর্থাৎ $.getJSON, $.getইত্যাদি) সমলয় যাবে। তদুপরি, ডকুমেন্টেশন এমনকি এটি ব্যবহার না করার পরামর্শ দেয়: "বিবরণ: ভবিষ্যতের অ্যাজাক্স অনুরোধগুলির জন্য ডিফল্ট মান সেট করুন Its এটির ব্যবহারের প্রস্তাব দেওয়া হয় না।"
ক্যারি কেন্ডাল

18

আমার মনে হয় আপনি দুজনেই ঠিক আছেন। পরবর্তী উত্তরটি ঠিকঠাক কাজ করে তবে এটি বিশ্বব্যাপী বিকল্প নির্ধারণের মতো যাতে আপনাকে নিম্নলিখিতগুলি করতে হয়:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });

10

আমার ক্ষেত্রে, জে ডি ঠিক বলেছেন। কল করার আগে আমাকে এটি যুক্ত করতে হবে।

$.ajaxSetup({
    async: false
});

আমার আগের কোডটিতে আমার কাছে এটি রয়েছে:

var jsonData= (function() {
    var result;
    $.ajax({
        type:'GET',
        url:'data.txt',
        dataType:'json',
        async:false,
        success:function(data){
            result = data;
        }
    });
    return result;
})();
alert(JSON.stringify(jsonData));

এটি অনুসন্ধান কাজ করে। তারপর আমি পরিবর্তন

var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));

সতর্কতা অবধারিত।

আমি যদি এই তিনটি লাইন যুক্ত করি তবে সতর্কতাটি আবার ডেটা দেখায়।

$.ajaxSetup({
    async: false
});
var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));

1

আপনার যদি কেবল awaitনেস্টিং কোড এড়াতে হবে:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));

0

আমি মনে করি না আপনি সেখানে এই বিকল্পটি সেট করতে পারেন। আপনাকে উপযুক্ত প্যারামিটারগুলির সাথে jQuery.ajax () ব্যবহার করতে হবে (মূলত getJSON কেবল সেই কলটিকে একটি সহজ এপিআইতে মোড়বে, পাশাপাশি)।


0

আপনার নিজস্ব রোল

function syncJSON(i_url, callback) {
  $.ajax({
    type: "POST",
    async: false,
    url: i_url,
    contentType: "application/json",
    dataType: "json",
    success: function (msg) { callback(msg) },
    error: function (msg) { alert('error : ' + msg.d); }
  });
}

syncJSON("/pathToYourResouce", function (msg) {
   console.log(msg);
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.