Ajax, পিছনে বোতাম এবং DOM আপডেট


113

যদি জাভাস্ক্রিপ্ট এ পৃষ্ঠায় ডিওএম সংশোধন করে, ব্যবহারকারী পৃষ্ঠায় বি পৃষ্ঠায় নেভিগেট করে এবং পৃষ্ঠায় ফিরে যাওয়ার জন্য পিছনে বোতামটি হিট করে A

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

এটি উপলব্ধি করে, তবুও কিছু ওয়েবসাইট (আপেল ডটকম, বেসক্যাম্পকুইট ডটকম ইত্যাদি) কোনওভাবে ব্রাউজারকে পৃষ্ঠার সর্বশেষতম পরিবেশনের জন্য বাধ্য করছে। ( http://www.apple.com/ca/search/?q=ipod এ যান , উপরে ক্লিক করুন ডাউনলোড লিঙ্কে ক্লিক করুন এবং তারপরে ফিরে বোতামটি ক্লিক করুন - সমস্ত ডিওএম আপডেট সংরক্ষণ করা হবে)

অসঙ্গতি কোথা থেকে আসছে?


মজার বিষয় হল, অ্যাপল হ্যাশটি সংশোধন না করে রাষ্ট্রটির কথা স্মরণ করছে .. হুমম
জেমস

অ্যাপল দেখে মনে হচ্ছে তারা কেবল সাড়া জাগানো ক্যাশে
চালাচ্ছে

অন্যরা ইতিমধ্যে পরামর্শ দিয়েছে এটি জাভাস্ক্রিপ্ট বা এজাক্সের সাথে সম্পর্কিত কিছু নয়। সঠিক উত্তর পেতে আপনার এই ট্যাগগুলি মুছে ফেলা উচিত।
বাইওয়াই

অ্যাপলের উদাহরণ দরিদ্র। যদি আপনি কোনও অনুসন্ধানের ক্ষেত্রের [উদাহরণস্বরূপ: পণ্য] চুক্তি করেন তবে আপনার লিঙ্কটি ক্লিক করুন, তারপরে ফিরে টিপুন, ডোম সংরক্ষণ করা হয়নি। আপনি একটি হ্যাশ সমাধান খুঁজছেন যা অনেকে পরামর্শ দিয়েছেন।
বিগবোনডেভাইকিং

আমি যখন পিছনের বোতামটি আঘাত করি তখন অ্যাপল মনে করতে পারে না যে আমি অনুসন্ধানের ফলাফলগুলির কোন পৃষ্ঠাটি ছিলাম। আই 7 ব্যবহার করে। আপনার একটি হ্যাশ সমাধান দরকার। দেখুন: ফেসবুক।
জোশ স্টোডোলা

উত্তর:


106

একটি উত্তর: অন্যান্য বিষয়গুলির মধ্যে আনলোডগুলি ইভেন্টের কারণে পিছনে / ফরোয়ার্ড ক্যাশে অবৈধ হয়ে যায়

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

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

jQuery উইন্ডোতে স্বয়ংক্রিয়ভাবে একটি আনলোড ইভেন্ট সংযুক্ত করে, তাই দুর্ভাগ্যক্রমে jQuery ব্যবহার করা আপনার পৃষ্ঠাকে ডিওএম সংরক্ষণের জন্য এবং দ্রুত ফিরে / ফরোয়ার্ডের জন্য বিএফচেতে সংরক্ষণ করা থেকে অযোগ্য ঘোষণা করবে will। [আপডেট: এটি jQuery 1.4 এ স্থির করা হয়েছে যাতে এটি কেবল আইইয়ের জন্য প্রযোজ্য]


3
আপনি একেবারে পেরেক দিয়েছিলেন উভয়ই, রেডডিট এবং স্ট্যাকওভারফ্লো জেকারি ব্যবহার করছে যখন বেসক্যাম্প এবং অ্যাপল প্রোটোটাইপস ব্যবহার করছে। এটি বেশ কিছু ব্যাখ্যা করে।
lubos hasko

+1 আকর্ষণীয় (যদিও ব্রাউজারটি অতিক্রম করবেন না) শুরু হওয়ার চেয়ে প্রশ্নটি অনেক বেশি আলাদা ...
বিগবোনডেভাইকিং

1
এটি সম্ভবত ক্রস ব্রাউজার হবে কারণ আমি এটি আমার ইন্টারনেট এক্সপ্লোরারেও পুনরুত্পাদন করতে পারি। আমি নিশ্চিত যে জাভাস্ক্রিপ্ট সক্ষম প্রতিটি ওয়েব ব্রাউজারকে যে কোনওভাবেই এই সমস্যাটি মোকাবেলা করতে হবে। তবে এটি সত্যিই একটি জগাখিচুড়ি, যখন আপনি এটির বিষয়ে চিন্তা করেন, ব্যাক বোতামটি সর্বদা লোককে সেই পৃষ্ঠাতে পৌঁছে দেওয়া উচিত যা তারা সমস্ত ডোম আপডেট, জাভাস্ক্রিপ্টের স্থিতি ইত্যাদির সাথে শেষ দেখেছে develop যদি তারা তা করে থাকে তবে ওয়েব ব্রাউজারগুলি bfcache মোটেই ব্যবহার না করে সমস্যাটি সমাধান করার চেষ্টা করা উচিত নয়। পুরো আনলোড ইভেন্টটি একটি বড় রসিকতা। আমি নিশ্চিত যে 99% সময় এটি মেমরি ফুটো প্যাচ করতে ব্যবহৃত হয়।
lubos hasko

1
বিশেষত, আই মেমরি ফাঁস হয়। :) jQuery আনলোড ইভেন্টটি ফায়ারফক্স ২-এ একটি (সম্পূর্ণ সম্পর্কযুক্ত) বাগ ঠিক করতেও ঘটে But তবে অন্যান্য ব্রাউজারগুলির জন্য এটি অপ্রয়োজনীয়। dev.jquery.com/ticket/3015 আমি মনে করি আমি অননলোডের জন্য অন্যান্য ব্যবহারের কথা শুনেছি যেমন আউটবাউন্ড ক্লিক ট্র্যাকিং বা ওয়েবপ্যাপের অবস্থা সংরক্ষণ করার মতো, তবে আমি নিজেই এটি ব্যবহার করার কোনও কারণ পাইনি এবং যদি বিকাশকারীরা তাদের তৈরি করতে চায় তবে সাইটগুলি তাদের ব্যবহারকারীদের জন্য ধীর এবং আরও বেদনাদায়ক (আমি মন্তব্য ঘৃণিত অবস্থার পুনরায় সেট করার জন্য কীভাবে পুনর্নির্দেশিত মন্তব্য পৃষ্ঠাগুলিতে নেভিগেট করব তা ঘৃণা করি), এটি তাদের অগ্রগামী।
মাইল 6

1
আনডলোড ইভেন্টটি কেবল ফায়ারফক্স এবং ক্রোমের জন্য নয়, আইইয়ের সাথে সংযুক্ত। সাফারির সর্বশেষ সংস্করণটি কোনও কিছু না করে ডম রাজ্যটি সংরক্ষণ করে।
ডেভিড

15

আমি ক্রোমকে সাফারির মতো আচরণ করার চেষ্টা করছিলাম এবং আমি যে একমাত্র উপায়টি খুঁজে পেয়েছি তা Cache-control: no-storeশিরোনামে সেট করা। এটি ব্যবহারকারী যখন পিছনের বোতাম টিপায় সার্ভার থেকে পৃষ্ঠাটি পুনরায় আনতে ব্রাউজারকে বাধ্য করে forces আদর্শ নয়, তবে একটি পুরানো পৃষ্ঠা দেখানোর চেয়ে ভাল।


5
এটি মূল প্রশ্নের সঠিক উত্তর। যদি আপনি ব্যাক-বোতামে কোনও সার্ভার পুনরায় লোড করতে চান তবে ক্যাশে-নিয়ন্ত্রণ 'নো-স্টোর, নো-ক্যাশে, অবশ্যই-পুনরায়করণ করুন' ব্যবহার করুন। ক্রোম নো-স্টোর চায় এবং আইই অবশ্যই পুনরায় বৈধ করতে চায়। অন্যান্য ব্রাউজারগুলির জন্য (এবং ডাব্লু 3 সি) নো-ক্যাশে যথেষ্ট।

3

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


আজকের মতো এটি মারা যায় না আমাকে এখন ফেসবুক কী করতে পারে তা বলতে পারবেন
রবীন্দ্র পায়েল

3

হ্যাশ (#) চিহ্নের সাথে এর কোনও যোগসূত্র নেই।

আপনি যদি অ্যাপলের এইচটিটিপি শিরোনামগুলি পরীক্ষা করে দেখেন তবে এটি কেবল পৃষ্ঠাটি ক্যাশে করছে।


অ্যাপলের উদাহরণটি দুর্বল, তারা পৃষ্ঠার রাজ্যটিকে "সংরক্ষণ" করছে না, তার ধারণা ডম এটি ভুলভাবে সংরক্ষণ করেছে
বিগব্ল্যান্ডলয়েডভাইকিং

2

ইউআরএল হ্যাশ / টুকরা শনাক্তকারী ব্যবহার করা একটি ওয়েব অ্যাপ্লিকেশনটিতে রাজ্যটিকে হুক / স্মরণ করার একটি দুর্দান্ত সাধারণ উপায় যা অ্যাজাক্স এবং ডোম আপডেটগুলিতে নির্ভর করে।

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


1

কারও জন্য সমস্যা রয়েছে Railsএবং এটির জন্য - আপনার সমস্যাটি bfcache নয় (আমি ভেবেছিলাম এটি ছিল) - এটি turbolinksরত্ন। এখানে এটা মুছে ফেলার জন্য কিভাবে হয়।

আশা করি এটি আপনাকে কিছুটা সময় সাশ্রয় দেবে এবং প্রাচীরের বিপরীতে আপনার মাথা ঝুঁকবে।


0

আপনি যা সন্ধান করছেন তা হ'ল একধরণের ইউআরএল হ্যাশ পরিচালনার জন্য। Url এ থাকা # টি কেবল ক্লায়েন্টের পক্ষে।

আপনি যখন জেএস দিয়ে পিছনের অবস্থা পরিবর্তন করবেন, তারপরে আপনি url এর # তে ডেটা আপডেট করবেন।

এছাড়াও আপনি এমন এক ধরণের পোলিং যোগ করুন যা হ্যাশ বদলেছে তা পর্যবেক্ষণ করে এবং হ্যাশের নতুন ডেটার ভিত্তিতে পৃষ্ঠার অবস্থা লোড করে।

এক নজর দেখে নাও:

http://ajaxpatterns.org/Unique_URLs


3
হ্যাশ প্রতীকটির সাথে এর কোনও যোগসূত্র নেই।
লুকা ম্যাটেইস

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