আমি কীভাবে জানব যে jQuery এর একটি অ্যাজাক্স অনুরোধ মুলতুবি আছে?


90

আমরা তৈরি একটি jQuery নিয়ন্ত্রণে আমার কিছু সমস্যা হচ্ছে। ধরুন আপনার একটি ড্রপডাউনলিস্ট রয়েছে যা আপনাকে যে আইটেমটি সন্ধান করছেন তার আইডি প্রবেশের অনুমতি দেয় এবং যখন আপনি ENTER টিপেন বা কোনও পাঠ্যবক্সে ফোকাস হারাবেন তখন এটি jQuery এর মাধ্যমে যাচাই করে যে আপনার প্রবেশ করা আইডিটি সঠিক, এটি সতর্কতা দেখায় যদি তা না করে 'টি।

জিনিসটি হ'ল কোনও সাধারণ ব্যবহারকারী যখন এটিতে একটি অবৈধ মান প্রবেশ করে এবং সাবমিট বাটনটি টিপে ফোকাস হারিয়ে ফেলেন, ফর্মটি জমা দেওয়ার পরে jQuery পোস্ট ফিরবে।

আমি কি কোন উপায় যাচাই করতে পারি যে jQuery দ্বারা কোনও এসিঙ্ক অনুরোধ প্রসেসিং আছে যাতে আমি ফর্মটি জমা দেওয়ার অনুমতি দিই না?

উত্তর:


37

আপনি যখন অনুরোধগুলি সক্রিয় থাকে তখন নজর রাখতে আপনি অজ্যাক্সস্টার্ট এবং এজ্যাক্সটপ ব্যবহার করতে পারেন ।


এটি আমার পক্ষে আরও ভাল কাজ করেছে, যেহেতু আমার নিয়ন্ত্রণটি এইচটিএমএলহেল্পার ব্যবহার করে বহুবার রেন্ডার করা হয়েছিল। ধন্যবাদ!
সাবানিটো

এটি আমার পক্ষে কাজ করেছিল! আমি এজ্যাক্সেন্ড এবং অজ্যাক্স স্যাক্সেস ব্যবহার করছিলাম তবে কিছু সময় আমার কাছে বেশ কয়েকটি অ্যাজাক্স অনুরোধ প্রেরণ করা হয়েছিল এবং আমি কেবল একবার শুরুতে এবং একবারে একবার পিস কোড চালাতে চাইতাম। অজ্যাকস্টার্ট এবং এজাক্সটপ ঠিক আমি যা খুঁজছিলাম তা ছিল! ধন্যবাদ
স্কটিটিজি

4
2019-এ লিঙ্কগুলি পুরানো
ক্রিশ্চিয়ান নিসসেন


25
 $(function () {
        function checkPendingRequest() {
            if ($.active > 0) {
                window.setTimeout(checkPendingRequest, 1000);
                //Mostrar peticiones pendientes ejemplo: $("#control").val("Peticiones pendientes" + $.active);
            }
            else {

                alert("No hay peticiones pendientes");

            }
        };

        window.setTimeout(checkPendingRequest, 1000);
 });

একটি ভাল সমাধান বলে মনে হচ্ছে তবে, আপনি কি "সর্বোচ্চ কল স্ট্যাকের আকার" নিয়ে কোনও সমস্যা সনাক্ত করেছেন?
মাইকেল

11

Aj .ajax () ফাংশনটি XMLHttpRequest অবজেক্ট দেয় returns জমা বাটনের "অনক্লিক" ইভেন্ট থেকে অ্যাক্সেসযোগ্য এমন একটি চলকগুলিতে এটি সঞ্চয় করুন। যখন একটি জমা ক্লিক প্রক্রিয়া করা হয় তখন XMLHttpRequest পরিবর্তনশীল কিনা তা পরীক্ষা করে দেখুন:

1) নাল, যার অর্থ এখনও কোনও অনুরোধ প্রেরণ করা হয়নি

2) যে রেডিস্টেট মান 4 (লোড)। এর অর্থ হল যে অনুরোধটি প্রেরণ করা হয়েছে এবং সাফল্যের সাথে ফিরে এসেছে।

এই উভয় ক্ষেত্রেই সত্য হিসাবে প্রত্যাবর্তন করুন এবং জমাটি চালিয়ে যেতে অনুমতি দিন। অন্যথায় জমাটি আটকাতে মিথ্যা প্রত্যাবর্তন করুন এবং তাদের জমা কেন কাজ করে না তা ব্যবহারকারীকে কিছু ইঙ্গিত দিন। :)


4
অনুরোধের বস্তুটি বিদ্যমান কিনা তা নির্ধারণের জন্য নাল যাচাই করা গুরুত্বপূর্ণ, তবে যদি এটি শূন্য না হয় তবে আপনাকে request.readyState > 0 && request.readyState < 4'সক্রিয়' অনুরোধ নির্ধারণের জন্য সত্যই পরীক্ষা করা উচিত কারণ রেডিস্টেট 0 ইঙ্গিত দেয় যে যদিও বস্তুটি তৈরি করা হয়েছে, একটি ওয়েব-অনুরোধ শুরু করা হয়নি। ।
নাথন টেলর

1

অনুরোধটি সক্রিয় থাকলে অনুরোধ বাতিল করতে আমাদের aj .axax.abort () পদ্ধতিটি ব্যবহার করতে হবে। অনুরোধটি সক্রিয় আছে কি না তা যাচাই করতে এই প্রতিশ্রুতিবদ্ধ অবজেক্টটি রেডিস্টেট সম্পত্তি ব্যবহার করে।

এইচটিএমএল

<h3>Cancel Ajax Request on Demand</h3>
<div id="test"></div>
<input type="button" id="btnCancel" value="Click to Cancel the Ajax Request" />

জেএস কোড

//Initial Message
var ajaxRequestVariable;
$("#test").html("Please wait while request is being processed..");

//Event handler for Cancel Button
$("#btnCancel").on("click", function(){
if (ajaxRequestVariable !== undefined)

if (ajaxRequestVariable.readyState > 0 && ajaxRequestVariable.readyState < 4)
{
  ajaxRequestVariable.abort();
  $("#test").html("Ajax Request Cancelled.");
}
});

//Ajax Process Starts
ajaxRequestVariable = $.ajax({
            method: "POST",
            url: '/echo/json/',
            contentType: "application/json",
            cache: false,
            dataType: "json",
            data: {
        json: JSON.encode({
         data:
             [
                            {"prop1":"prop1Value"},
                    {"prop1":"prop2Value"}
                  ]         
        }),
        delay: 11
    },

            success: function (response) {
            $("#test").show();
            $("#test").html("Request is completed");           
            },
            error: function (error) {

            },
            complete: function () {

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