JQuery.ajax () এ "async: মিথ্যা" কী করবে?


256

বিশেষত, এটি ডিফল্ট ( async: true) থেকে কীভাবে আলাদা ?

কোন পরিস্থিতিতে আমি স্পষ্টভাবে সেট asyncকরতে চাই false, এবং পৃষ্ঠায় থাকা অন্যান্য ঘটনা গুলি চালানো থেকে বিরত করার সাথে এর কিছু করার কি আছে?


এই প্রশ্নের অনুরূপ দেখতে: http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perfor-a-synchronous-rather-than-asynchronous-ajax-req কলটিকে সিঙ্ক্রোনাস করে। ...
CSharpAtl

হ্যাঁ, আমার কাছে এটি "অজ্যাক্স" (অ্যাসিনক্রোনাস জাভাস্ক্রিপ্ট এবং এক্সএমএল) ব্যতীত অন্য কিছু বলা উচিত বলে মনে হচ্ছে ...
ডেভলর্ড

অ্যাসিঙ্ক্রোনাসের অর্থ হ'ল স্ক্রিপ্টটি সার্ভারে একটি অনুরোধ প্রেরণ করবে এবং উত্তরের জন্য অপেক্ষা না করেই এটি কার্যকর করা চালিয়ে যাবে। উত্তর পাওয়ার সাথে সাথেই একটি ব্রাউজার ইভেন্ট বরখাস্ত হয়, যার ফলে স্ক্রিপ্টটি সম্পর্কিত ক্রিয়াকলাপগুলি সম্পাদন করতে দেয়।
সাগরপঞ্চল

উত্তর:


300

পৃষ্ঠায় থাকা অন্যান্য ঘটনাগুলিকে গুলি চালানো থেকে বিরত করার সাথে কি কিছু করার আছে?

হ্যাঁ.

অ্যাসিঙ্কটিকে মিথ্যা হিসাবে সেট করার অর্থ আপনার ফাংশনটির পরবর্তী বিবৃতি আহ্বানের আগে আপনি যে বিবৃতিটি কল করছেন তা সম্পূর্ণ করতে হবে। যদি আপনি অ্যাসিঙ্ক সেট করেন: সত্য হয় তবে সেই বিবৃতিটি কার্যকর হয়ে যাবে এবং পরবর্তী বিবৃতিটি অ্যাসিঙ্ক বিবৃতিটি এখনও সম্পন্ন হয়েছে কিনা তা বিবেচনা না করেই ডাকা হবে।

আরও অন্তর্দৃষ্টি জন্য দেখুন: jQuery আজাক্স সাফল্য বেনাম ফাংশন সুযোগ


12
জাভাস্ক্রিপ্ট থ্রেড না থাকায় আমি কীভাবে এটি সম্পন্ন হয়েছিল তা সবসময়ই ভাবছিলাম।
ম্যাট

4
@ এল.ডিলেও - না, মোটেও নয় - স্থগিতাদেশগুলি অ্যাসিঙ্ক্রোনাস ফাংশন কলগুলির জটিলতা পরিচালনার আরেকটি উপায় - কল async: false থেকে পুরোপুরি অ্যাসিঙ্ক্রোনাসিটি সরিয়ে দেয়ajax ব্লকে কল - এটি অনুসরণকারী কোডটি সার্ভারের প্রতিক্রিয়া না দেওয়া পর্যন্ত কার্যকর করা হয় না।
শান ভিয়েরা

14
মনে রাখবেন এরও অর্থ হ'ল এজ্যাক্স কার্যকর করার সময় ব্রাউজার কোনও ঘটনা ক্যাপচার / ট্রিগার করবে না। ফায়ারফক্স কেন ক্লিকের ইভেন্টটি ট্রিগার করছে না তা বোঝার চেষ্টা করে আমি এটি শক্তভাবে খুঁজে পেয়েছি। এটি একটি "জোরপূর্বক" অস্পষ্ট ইভেন্টের কারণে নিম্নলিখিত সিঙ্ক কলকে ব্লক করে দেওয়া হয়েছে।
পলিউলিভার

3
@ ম্যাট না এটি (আর নেই
w

5
মনে হচ্ছে async: falseএটি মারা গেছে, আমি চেষ্টা করে দেখেছি18:17:49.384 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help http://xhr.spec.whatwg.org/ 1 jquery.js:9061:4
আবা

120
  • async:false= কোড বিরতি দেওয়া হয়েছে । ( এটি শেষ হওয়ার অপেক্ষায় অন্যান্য কোড ।)
  • async:true= কোড অবিরত । (কোনও কিছুতেই বিরতি দেওয়া হয় না । অন্যান্য কোড অপেক্ষা করছে না ))

এই হিসাবে সহজ।


বেশ জেনেরিক "কোডের বাকী বিশ্রাম", কোডের বিরতি দেওয়ার সুযোগটি ব্যাখ্যা করে।
বার্ট

26

Async:Falseবিশ্রাম কোড কার্যকর করা হবে। আপনি একবার এজাক্সের প্রতিক্রিয়া পেয়ে গেলে, কেবল তখনই, বাকি কোডগুলি কার্যকর হবে।


18

আপনি যদি অ্যাসিক্রোনাস পুনরুদ্ধার অক্ষম করেন, অনুরোধটি শেষ না হওয়া পর্যন্ত আপনার স্ক্রিপ্টটি ব্লক হয়ে যাবে। এটি একটি পরিচিত অর্ডারে অনুরোধগুলির কিছু ক্রম সম্পাদন করার জন্য দরকারী, যদিও আমি অ্যাসিঙ্ক কলব্যাকগুলি ক্লিনার বলে মনে করি।


জো: এটি আপনার পটভূমিতে কোনও কর্মী থ্রেড আছে কিনা তার উপর নির্ভর করবে।
জন মিলিকিন

10

একটি ব্যবহারের ক্ষেত্রে ajaxব্যবহারকারীর উইন্ডোটি বন্ধ করা বা পৃষ্ঠাটি ছাড়ার আগে একটি কল করা। এটি ব্যবহারকারীর অন্য সাইটে নেভিগেট করতে বা ব্রাউজারটি বন্ধ করার আগে ডাটাবেসে কিছু অস্থায়ী রেকর্ড মুছে ফেলার মতো হবে।

 $(window).unload(
        function(){
            $.ajax({
            url: 'your url',
            global: false,
            type: 'POST',
            data: {},
            async: false, //blocks window close
            success: function() {}
        });
    });

51
জাভাস্ক্রিপ্টের কোনও পরিমাণই কোনও ব্রাউজার উইন্ডো বন্ধ হতে বাধা দেবে না
জ্যাম্মিকাম

সম্পূর্ণ অসম্পর্কিত কোনও কিছুর জন্য আমার অ্যাসিঙ্ক মিথ্যা দরকার তবে এটি আমার সমস্যার সমাধান করেছে কারণ এটি আমার স্ক্রিপ্টটিকে একটি এক্সএমএল ফাইল থেকে পৃষ্ঠাটিতে অপরিজ্ঞাত হিসাবে পপুলেশন করার আগে একটি মান ধরতে দেয়।
J_L

8

থেকে

https://xhr.spec.whatwg.org/#synchronous-flag

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


8

অ্যাসিঙ্কটিকে মিথ্যা হিসাবে সেট করার অর্থ এজাক্স অনুরোধের অনুসরণের নির্দেশাবলীর অনুরোধটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে। নীচে একটি কেস দেওয়া আছে যেখানে কোডটি সঠিকভাবে কাজ করার জন্য কোনওটিকে মিথ্যা হিসাবে অ্যাসিঙ্ক সেট করতে হবে।

var phpData = (function get_php_data() {
  var php_data;
  $.ajax({
    url: "http://somesite/v1/api/get_php_data",
    async: false, 
    //very important: else php_data will be returned even before we get Json from the url
    dataType: 'json',
    success: function (json) {
      php_data = json;
    }
  });
  return php_data;
})();

উপরে উদাহরণস্বরূপ অ্যাসিঙ্কের ব্যবহার পরিষ্কারভাবে ব্যাখ্যা করা হয়েছে : মিথ্যা

এটি মিথ্যা হিসাবে সেট করে, আমরা নিশ্চিত করেছি যে একবার ইউআরএল থেকে ডেটা পুনরুদ্ধার করা হবে , কেবল তারপরেই পিএইচপি_ডাটা; বলা হয়


অন্য কারও ক্ষেত্রে আমার মতো একই সমস্যা রয়েছে: এই উত্তরটি হাইলাইট করে যে return php_dataবিবৃতিটি সাফল্য ফাংশনে থাকতে পারে না, তবে তাকে $.ajax()ফাংশনের বাইরে থাকতে হবে । আমি আমার return php_datasuccess: function(){}
সমতুল্যটি

0

এই বিকল্পটি দশমিক: 3 ব্যবহার করুন

এখানে ইউআরএল: https://demos.telerik.com/kendo-ui/numerictextbox/index

<!DOCTYPE html>
<html>
<head>
    <base href="https://demos.telerik.com/kendo-ui/numerictextbox/index">
    <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
    <title></title>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.default-v2.min.css" />

    <script src="https://kendo.cdn.telerik.com/2019.3.1023/js/jquery.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2019.3.1023/js/kendo.all.min.js"></script>


</head>
<body>

        <div id="example">
            <div id="add-product" class="demo-section k-content">
                <p class="title">Add new product</p>
                <ul id="fieldlist">
                    <li>
                        <label>
                            Price:
                            <input id="currency" type="number" title="currency" value="30" min="0" max="100" style="width: 100%;" />
                        </label>
                    </li>
                    <li>
                        <label>
                            Price Discount:
                            <input id="percentage" value="0.05" title="percentage" style="width: 100%;" />
                        </label>
                    </li>
                    <li>
                        <label>
                            Weight:
                            <input id="custom" value="2" title="custom" style="width: 100%;" />
                        </label>
                    </li>
                    <li>
                        <label>
                            Currently in stock:
                            <input id="numeric" type="number" title="numeric" value="17" min="0" max="100" step="1" style="width: 100%;" />
                        </label>
                    </li>
                </ul>
            </div>


            <script>
                $(document).ready(function() {
                    // create NumericTextBox from input HTML element
                    $("#numeric").kendoNumericTextBox();

                    // create Curerncy NumericTextBox from input HTML element
                    $("#currency").kendoNumericTextBox({
                        format: "c",
                        decimals: 3
                    });

                    // create Percentage NumericTextBox from input HTML element
                    $("#percentage").kendoNumericTextBox({
                        format: "p0",
                        min: 0,
                        max: 0.1,
                        step: 0.01
                    });

                    // create NumericTextBox from input HTML element using custom format
                    $("#custom").kendoNumericTextBox({
                        format: "#.00 kg"
                    });
                });
            </script>

            <style>
                .demo-section {
                    padding: 0;
                }

                #add-product .title {
                    font-size: 16px;
                    color: #fff;
                    background-color: #1e88e5;
                    padding: 20px 30px;
                    margin: 0;
               }

               #fieldlist {
                   margin: 0 0 -1.5em;
                   padding: 30px;
               }

               #fieldlist li {
                   list-style: none;
                   padding-bottom: 1.5em;
               }

               #fieldlist label {
                   display: block;
                   padding-bottom: .6em;
                   font-weight: bold;
                   text-transform: uppercase;
                   font-size: 12px;
               }

               #fieldlist label .k-numerictextbox {
                   font-size: 14px;
               }
            </style>

        </div>


</body>
</html>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.