এজ্যাক্সের জন্য সময়সীমা নির্ধারণ করুন (jQuery)


194
$.ajax({
    url: "test.html",
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

কখনও কখনও successফাংশন ভাল কাজ করে, কখনও কখনও না।

এই এজ্যাক্স অনুরোধের জন্য আমি কীভাবে সময়সীমা নির্ধারণ করব? উদাহরণস্বরূপ, 3 সেকেন্ড, যদি সময় বাইরে থাকে তবে একটি ত্রুটি দেখান।

সমস্যাটি হ'ল, এজ্যাক্স অনুরোধটি শেষ না হওয়া অবধি ব্লককে স্থির করে দেয়। যদি সার্ভারটি অল্প সময়ের জন্য বন্ধ থাকে তবে এটি কখনও শেষ হবে না।


2
আপনার ,পরে সেখানে দরকার }
pimvdb


উত্তর:


328

দয়া করে $.ajax ডকুমেন্টেশন পড়ুন , এটি একটি আচ্ছাদিত বিষয়।

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

error: function(jqXHR, textStatus, errorThrown)বিকল্পের টেক্সটস্ট্যাটাস প্যারামিটারটি অ্যাক্সেস করে কী ধরণের ত্রুটি ছুঁড়েছে তা আপনি পেতে পারেন । বিকল্পগুলি হ'ল "টাইমআউট", "ত্রুটি", "পরিত্যাগ" এবং "পার্সেরেরর"।


4
টাইমআউট ত্রুটি ধরা সম্পর্কে সম্পর্কিত স্ট্যাকওভারফ্লো.com
অ্যাড্রিয়েন

1
টাইমআউট: 1, কেবল আমার জন্য কাজ করছে বলে মনে হচ্ছে না, এটি পাস হয়ে গেছে, কখনই শেষ হয়নি
পান্ডাউড

চেষ্টা করে / ধরা দিয়ে পুরো $ .জ্যাক্স কলটি মোড়ানো নিশ্চিত করুন। অ্যাবোর্টস jQuery দ্বারা ধরা পড়ে না এবং $ .জ্যাক্স কলের বাইরে ফেলে দেওয়া হবে।
justdan23

112

এখানে কিছু উদাহরণ রয়েছে যা jQuery এর পুরানো এবং নতুন দৃষ্টান্তগুলিতে টাইমআউট নির্ধারণ এবং সনাক্ত করে।

Live Demo

JQuery 1.8+ দিয়ে প্রতিশ্রুতি দিন

Promise.resolve(
  $.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
  })
).then(function(){
  //do something
}).catch(function(e) {
  if(e.statusText == 'timeout')
  {     
    alert('Native Promise: Failed from timeout'); 
    //do something. Try again perhaps?
  }
});

jQuery 1.8+

$.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
}).done(function(){
    //do something
}).fail(function(jqXHR, textStatus){
    if(textStatus === 'timeout')
    {     
        alert('Failed from timeout'); 
        //do something. Try again perhaps?
    }
});​

jQuery <= 1.7.2

$.ajax({
    url: '/getData',
    error: function(jqXHR, textStatus){
        if(textStatus === 'timeout')
        {     
             alert('Failed from timeout');         
            //do something. Try again perhaps?
        }
    },
    success: function(){
        //do something
    },
    timeout:3000 //3 second timeout
});

লক্ষ্য করুন যে টেক্সটস্ট্যাটাস পরম (বা jqXHR.statusText ) আপনাকে ত্রুটিটি কী তা জানাতে দেবে। যদি আপনি জানতে চান যে একটি ব্যর্থতা একটি সময়সীমা পেরিয়ে যাওয়ার কারণে এটি দরকারী হতে পারে।

ত্রুটি (jqXHR, টেক্সটস্ট্যাটাস, ত্রুটিটি ট্রেন)

অনুরোধ ব্যর্থ হলে কল করতে একটি ফাংশন। ফাংশনটি তিনটি আর্গুমেন্ট গ্রহণ করে: জেএকএক্সএইচআর (jQuery 1.4.x, এক্সএমএলএইচটিপিআরকোয়েস্ট) অবজেক্ট, একটি স্ট্রিং যা ঘটেছে ত্রুটির ধরণের বর্ণনা দেয় এবং andচ্ছিক ব্যতিক্রম বস্তু যদি ঘটে থাকে তবে। দ্বিতীয় আর্গুমেন্টের জন্য সম্ভাব্য মানগুলি (নাল ছাড়াও) হ'ল "টাইমআউট", "ত্রুটি", "পরিত্যাগ" এবং "পার্সেরেরর"। যখন কোনও HTTP ত্রুটি দেখা দেয়, ত্রুটিটি ট্রাউইন HTTP স্থিতির পাঠ্য অংশ যেমন "পাওয়া যায় না" বা "অভ্যন্তরীণ সার্ভার ত্রুটি" গ্রহণ করে। JQuery 1.5 হিসাবে, ত্রুটি সেটিং ফাংশনগুলির একটি অ্যারে গ্রহণ করতে পারে। প্রতিটি ক্রিয়াকলাপ ঘুরে বলা হবে। দ্রষ্টব্য: এই হ্যান্ডলারটি ক্রস-ডোমেন স্ক্রিপ্ট এবং জেএসএনপি অনুরোধের জন্য ডাকা হয় না।

এসআরসি: http://api.jquery.com/jQuery.ajax/


মধ্যে পার্থক্য কি $.ajax().fail()এবং $.ajax().error()?
আলেজান্দ্রো গার্সিয়া ইগলেসিয়াস

1
@ গার্সিয়া ওয়েবেডেভ - জ্যাকারি আজাক্সের কল
ব্র্যান্ডন বোুন

3
JQuery 1.8+ অন্তর্ভুক্ত করার জন্য +1। অনুরূপ প্রশ্নের বেশিরভাগ অন্যান্য উত্তরের মধ্যে <থেকে সাফল্য / ত্রুটি অন্তর্ভুক্ত।
ব্র্যান্ডস্ক্রিপ্ট

22

আপনি timeoutএজাক্স বিকল্পগুলিতে সেটিংটি ব্যবহার করতে পারেন :

$.ajax({
    url: "test.html",
    timeout: 3000,
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

এজ্যাক্স অপশন সম্পর্কে সমস্ত এখানে পড়ুন: http://api.jquery.com/jQuery.ajax/

মনে রাখবেন যে যখন একটি সময়সীমা ঘটে তখন errorহ্যান্ডলারটি ট্রিগার করা হয় এবং successহ্যান্ডলারটি নয় :)


2

পূর্ণ বৈশিষ্ট্যযুক্ত .ajaxjQuery ফাংশন ব্যবহার করুন । উদাহরণের জন্য https://stackoverflow.com/a/3543713/1689451 এর সাথে তুলনা করুন ।

পরীক্ষা না করে, কেবলমাত্র আপনার কোডটি রেফারেন্সকৃত এসও প্রশ্নের সাথে মার্জ করা:

target = $(this).attr('data-target');

$.ajax({
    url: $(this).attr('href'),
    type: "GET",
    timeout: 2000,
    success: function(response) { $(target).modal({
        show: true
    }); },
    error: function(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​

উত্তরের জন্য এইচ-বাহরামী এবং রুডলফ মাহলবাউর ধন্যবাদ জানায় তবে আমি এজাক্সে নতুন তাই আমার কোডের মাধ্যমে পরিষ্কার করুন ... কারণ আমি ইতিমধ্যে এই উত্তরগুলি দেখেছি তবে কী হচ্ছে তা আমি জানি না ... তাই আমাকে সাহায্য করুন ...

। লোড () এর মাধ্যমে আমি কীভাবে পারি? এটা সম্ভব নাকি না?

@ এসএস, লোডের ডকুমেন্টেশন: টাইমআউট সন্ধান করার চেষ্টা করুন: api.jquery.com/load - এবং আমার কোডে আমার একটি টাইপ ছিল, সংশোধন করে।
রুডল্ফ মাহলবাউর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.