JQuery বন্ধ করুন। ক্যাশে হওয়া থেকে প্রতিক্রিয়া লোড করুন


244

আমার কাছে নীচের কোডটি একটি URL- এ জিইটি অনুরোধ তৈরি করছে:

$('#searchButton').click(function() {
    $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());            
});

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

যদি আমি ব্রাউজারটি বন্ধ করে দিয়ে আবার খুলি তবে এটি একবারে কাজ করে এবং তারপরে বাসি তথ্যটি ফিরিয়ে দেওয়া শুরু করে। আমি কি jQuery দ্বারা এটি নিয়ন্ত্রণ করতে পারি বা ক্যাচিং নিয়ন্ত্রণ করতে আমার পিএইচপি স্ক্রিপ্ট আউটপুট শিরোনাম থাকা দরকার?

উত্তর:


419

আপনি $.ajax()যদি প্রতি অনুরোধের ভিত্তিতে ক্যাশে নিয়ন্ত্রণ করতে চান তবে আপনাকে আরও জটিল ফাংশন ব্যবহার করতে হবে। অথবা, যদি আপনি কেবল সমস্ত কিছুর জন্য এটি বন্ধ করতে চান তবে এটি আপনার স্ক্রিপ্টের শীর্ষে রাখুন:

$.ajaxSetup ({
    // Disable caching of AJAX responses
    cache: false
});

2
ধন্যবাদ! এটি কি jQuery ডকুমেন্টেশনে অবস্থিত? আহ ... এটি খুঁজে পেয়েছি। দইযুক্ত এটি বেশিরভাগ দিন বাট দিয়ে লাথি মারছিল ... আবার ধন্যবাদ!
বাইটেন্ডার

35
এই সমস্ত ক্যাশে: অনুরোধটি করার সময় মিথ্যা হ'ল কোনও ইউআরএল শেষে একটি সংখ্যা যুক্ত করা হয় (আমি এটির একটি টাইমস্ট্যাম্প বিশ্বাস করি)। ক্যাশে সেটিংস পরিচালনা করতে অন্য স্থানে, বিভিন্ন HTTP প্রতিক্রিয়া হেডার সেটিং দ্বারা সার্ভার বা ওয়েব অ্যাপ্লিকেশন থেকে এসেছ মেয়াদ শেষ মতো Pragma, ইত্যাদি ...
ব্রায়ান Rehbein

1
এই তথ্যের টুকরোটি আমাকে প্রচুর পরিমাণে হেল্প করেছে - এটি আমাকে সত্যিকারের
নাগিং

এটা ভালবাসা! এখন আমাকে অতিরিক্ত ভার্বোস .ajax কলগুলি ব্যবহার করতে হবে না এবং শর্টকাটগুলি ব্যবহার করতে পারেন!
গ্যাটারস্টার

1
উজ্জ্বল - আমি এই ফাংশনটি খুঁজে পেয়েছি তবে জানতাম না যে এটি কোনও ডিভিডিতে একটি পাঠ্য ডকুমেন্ট লোড করার মতো সহজ কিছু নিয়ে কাজ করবে load লোড
ড্যান

107

প্রতি অনুরোধের ভিত্তিতে কীভাবে ক্যাশে নিয়ন্ত্রণ করতে হয় তার একটি উদাহরণ এখানে

$.ajax({
    url: "/YourController",
    cache: false,
    dataType: "html",
    success: function(data) {
        $("#content").html(data);
    }
});

7
আমি কেবল সমস্ত ক্যাচিং বন্ধ করে রাখার চেয়ে এইভাবে অনেক বেশি পছন্দ করি।
পল টমলিন

সমস্ত ক্যাচিং বন্ধ না করার জন্য আমি এটিও পছন্দ করি। এছাড়াও, ফিল্টারিংয়ের জন্য এই লিঙ্কটিও দেখুন [লিঙ্ক] stackoverflow.com/questions/4245231/…
ড্যান ডায়ন

@ মার্শাল কোডটি এখানে আপনি পোস্ট বা গেট টাইপ উল্লেখ করেন নি ...... সুতরাং jquery এর জন্য ডিফল্ট কী?
টমাস 12

ডিফল্ট পদ্ধতিটি জিইটি
সমৃদ্ধ টি।

35

একটি উপায় ইউআরএল শেষে একটি অনন্য নম্বর যুক্ত:

$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&uid='+uniqueId());

প্রতিবার যখন বলা হয় তখন কিছু আলাদা করতে আপনি যেখানে ইউনিক আইড () লিখেন।


1
এমনকি সহজ, কেবল ব্যবহার করুন (+new Date)(বা new Date().getTime()আপনি যদি স্টিকার হন)। আপনি কীভাবে জাভাস্ক্রিপ্টে টাইমস্ট্যাম্প পাবেন?
তৃতীয় ব্যক্তি

একটি নতুন প্রশ্ন জিজ্ঞাসা করুন এবং এটি এখানে লিঙ্ক করুন। আপনি যদি এটি সঠিকভাবে করেন, আপনি সম্পূর্ণ নতুন URL তৈরি করছেন, সুতরাং ব্রাউজারের দ্বারা সেগুলি সম্ভবত ক্যাশে করা যায় না।
লু ফ্রাঙ্কো

কোনও সম্পর্কযুক্ত সমস্যা সমাধান করতে এটি ব্যবহার করুন। একটি ট্রিট কাজ করে।
অ্যালেক্স

9

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

'?: _ = + Math.round (Math.random () * 10000)


6
/**
 * Use this function as jQuery "load" to disable request caching in IE
 * Example: $('selector').loadWithoutCache('url', function(){ //success function callback... });
 **/
$.fn.loadWithoutCache = function (){
 var elem = $(this);
 var func = arguments[1];
 $.ajax({
     url: arguments[0],
     cache: false,
     dataType: "html",
     success: function(data, textStatus, XMLHttpRequest) {
   elem.html(data);
   if(func != undefined){
    func(data, textStatus, XMLHttpRequest);
   }
     }
 });
 return elem;
}

এটি প্রায় আমার জন্য কৌশল করেছে। কলব্যাক ফাংশন ব্যতীত "এই" মানটি ভুল রয়েছে। এটি ঠিক করার জন্য আমি func.call(elem, data, textStatus, XMLHttpRequest);
ফানক

5

সাশা ভাল ধারণা, আমি একটি মিশ্রণ ব্যবহার করি।

আমি একটি ফাংশন তৈরি

LoadWithoutCache: function (url, source) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function (data) {
            $("#" + source).html(data);
            return false;
        }
    });
}

এবং উদাহরণস্বরূপ আমার পৃষ্ঠার বিভিন্ন অংশের জন্য প্রার্থনা করুন:

ইনিশ: ফাংশন (অ্যাকশনউআরএল 1, অ্যাকশন ইউআরএল 2, অ্যাকশন ইউআরএল 3) {

var উদাহরণJS = {

Init: function (actionUrl1, actionUrl2, actionUrl3)           ExampleJS.LoadWithoutCache(actionUrl1, "div1");

উদাহরণ জেএস.লোয়াড উইথআউটক্যাচ (ক্রিয়া ইউআরএল 2, "ডিভ 2"); উদাহরণ জেএস.লোয়াড উইথআউটক্যাচ (ক্রিয়া ইউআরএল 3, "ডিভ 3"); }},


4

আইই-তে এটি বিশেষ বিরক্তিজনক। মূলত আপনাকে সার্ভার থেকে আপনার প্রতিক্রিয়ার সাথে 'নো-ক্যাশে' এইচটিটিপি হেডার পাঠাতে হবে।


3

পিএইচপি-র জন্য, আপনার স্ক্রিপ্টে এই লাইনটি যুক্ত করুন যা আপনার পছন্দসই তথ্য সরবরাহ করে:

header("cache-control: no-cache");

বা, ক্যোয়ারী স্ট্রিংয়ে একটি অনন্য ভেরিয়েবল যুক্ত করুন:

"/portal/?f=searchBilling&x=" + (new Date()).getTime()

ক্যাশে: aj .জ্যাক্স ফাংশনে মিথ্যা বিকল্পটি স্বয়ংক্রিয়ভাবে আপনার দ্বিতীয় পরামর্শের মতো ক্যোয়ারী স্ট্রিংয়ে অনন্য ভেরিয়েবল যুক্ত করে।
ব্রায়ান রেহবেইন

2

আপনি যে প্রতিটি পৃষ্ঠায় দেখেছেন তার জন্য একটি অনন্য ইউআরএল তৈরি করার জন্য টাইমস্ট্যাম্প ব্যবহার করবেন না জকিউরি মোবাইল দ্বারা ডিওমে ক্যাশ করা হয় এবং আপনি শীঘ্রই মোবাইলগুলিতে মেমরি না পাওয়ার সমস্যার মধ্যে পড়ে যান।

$jqm(document).bind('pagebeforeload', function(event, data) {
    var url = data.url;
    var savePageInDOM = true;

    if (url.toLowerCase().indexOf("vacancies") >= 0) {
        savePageInDOM = false;
    }

    $jqm.mobile.cache =  savePageInDOM;
})

পৃষ্ঠাটি লোড হওয়ার আগে এই কোডটি সক্রিয় হয়, আপনি ইউআরএল.ইন্ডেক্সফ () ব্যবহার করতে পারেন URL টি আপনি ক্যাশে রাখতে চান কিনা তা নির্ধারণ করতে এবং সেই অনুসারে ক্যাশে প্যারামিটার সেট করে।

উইন্ডো.লোকেশন = "" ব্যবহার করবেন না; ইউআরএল পরিবর্তন করতে অন্যথায় আপনি ঠিকানায় নেভিগেট করবেন এবং পেজফ্রোডলোড আগুন লাগবে না। এই সমস্যাটি সমাধান করার জন্য উইন্ডো.লোকেশন.হ্যাশ = "" ব্যবহার করুন;


1
$ জকিএম কি? $ jqm = $? m .মোবাইল.cache অপরিবর্তিত
লুসিউজ

2

আপনি যদি জ্যাকুরির। লোড () পদ্ধতিটি আটকে রাখতে চান তবে জাভাস্ক্রিপ্ট টাইমস্ট্যাম্পের মতো ইউআরএলটিতে অনন্য কিছু যুক্ত করুন। "+ নতুন তারিখ ()। গেটটাইম ()"। লক্ষ্য করুন আমাকে একটি "& সময় =" যুক্ত করতে হয়েছিল যাতে এটি আপনার পিড ভেরিয়েবলকে পরিবর্তন করে না।

$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&time='+new Date().getTime());            
});

1

আপনি jquery লোড ফাংশনটি এমন সংস্করণ দিয়ে প্রতিস্থাপন করতে পারেন যা ক্যাশেটিকে মিথ্যাতে সেট করে।

(function($) {
  var _load = jQuery.fn.load;
  $.fn.load = function(url, params, callback) {
  if ( typeof url !== "string" && _load ) {
        return _load.apply( this, arguments );
  }
    var selector, type, response,
      self = this,
      off = url.indexOf(" ");

    if (off > -1) {
      selector = stripAndCollapse(url.slice(off));
      url = url.slice(0, off);
    }

    // If it's a function
    if (jQuery.isFunction(params)) {

      // We assume that it's the callback
      callback = params;
      params = undefined;

      // Otherwise, build a param string
    } else if (params && typeof params === "object") {
      type = "POST";
    }

    // If we have elements to modify, make the request
    if (self.length > 0) {
      jQuery.ajax({
        url: url,

        // If "type" variable is undefined, then "GET" method will be used.
        // Make value of this field explicit since
        // user can override it through ajaxSetup method
        type: type || "GET",
        dataType: "html",
        cache: false,
        data: params
      }).done(function(responseText) {

        // Save response for use in complete callback
        response = arguments;

        self.html(selector ?

          // If a selector was specified, locate the right elements in a dummy div
          // Exclude scripts to avoid IE 'Permission Denied' errors
          jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :

          // Otherwise use the full result
          responseText);

        // If the request succeeds, this function gets "data", "status", "jqXHR"
        // but they are ignored because response was set above.
        // If it fails, this function gets "jqXHR", "status", "error"
      }).always(callback && function(jqXHR, status) {
        self.each(function() {
          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
        });
      });
    }

    return this;
  }
})(jQuery);

এটিকে বিশ্বব্যাপী কোথাও রাখুন যেখানে এটি জিকিউরি লোডের পরে চলবে এবং আপনার সব সেট করা উচিত। আপনার বিদ্যমান লোড কোড আর ক্যাশে করা হবে না।


0

এটা চেষ্টা কর:

$("#Search_Result").load("AJAX-Search.aspx?q=" + $("#q").val() + "&rnd=" + String((new Date()).getTime()).replace(/\D/gi, ''));

আমি এটি ব্যবহার করার সময় এটি ঠিক কাজ করে।


0

আমি লক্ষ্য করেছি যে যদি কিছু সার্ভার (যেমন অ্যাপাচি 2) নির্দিষ্টভাবে কোনও "ক্যাশে" অনুমতি বা অস্বীকার করার জন্য কনফিগার করা না থাকে তবে সার্ভারটি ডিফল্টরূপে "ক্যাশেড" প্রতিক্রিয়া প্রেরণ করতে পারে, আপনি এইচটিটিপি শিরোনামকে "নো-ক্যাশে" সেট করে থাকলেও। সুতরাং আপনার সার্ভারটি কোনও প্রতিক্রিয়া প্রেরণের আগে কোনও কিছু "ক্যাশে" করছে না তা নিশ্চিত করুন:

অ্যাপাচি 2 এর ক্ষেত্রে আপনাকে করতে হবে

1) "ডিস্ক_ক্যাচি.কম" ফাইলটি সম্পাদনা করুন - ক্যাশে অক্ষম করতে "ক্যাশেডাইজেবল / লোকাল_ফাইলেস" নির্দেশিকা যুক্ত করুন

2) মোড_ ক্যাশে মডিউলগুলি লোড করুন (উবুন্টুতে "সুডো এ 2 এনএমড ক্যাশে" এবং "সুডো এ 2 মডড ডিস্ক_ক্যাচ")

3) অ্যাপাচি 2 পুনরায় চালু করুন (উবুন্টু "সুডো পরিষেবা অ্যাপাচি 2 পুনঃসূচনা");

এটি সার্ভার সাইডে ক্যাশে অক্ষম করার কৌশলটি করা উচিত। চিয়ার্স! :)


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