jQuery সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকিউস্টকে হ্রাস করেছে


119

অন্য অনেকের মতো, আমার ওয়েবসাইট jQuery ব্যবহার করছে। আমি যখন বিকাশকারী সরঞ্জামগুলি খুলি, তখন আমি একটি সতর্কতা দেখি যা XMLHTTPRequest হয় বলে e

শেষ ব্যবহারকারীর অভিজ্ঞতাতে এর ক্ষতিকারক প্রভাবের কারণে অবনমিত হয়েছে।

আমি গিয়েছিলাম এবং ডকুমেন্টেশনের অংশটি পড়েছি , তবে এটি মোটামুটি প্রযুক্তিগত ছিল। এক্সএমএলএইচটিপিআরকিউয়েস্ট থেকে WHATWG- এ সরল পদগুলিতে পরিবর্তনের পরিণতিগুলি কেউ ব্যাখ্যা করতে পারেন? এটি বলছে এটি ২০১২ সালে হয়েছিল।

এছাড়াও, ডকুমেন্টেশনটিতে বলা হয়েছে যে কর্মীদের বাইরে সিঙ্ক্রোনাস এক্সএমএলএইচটিপিউইকুয়েস্ট ওয়েব প্ল্যাটফর্ম থেকে সরানোর প্রক্রিয়াধীন রয়েছে, যখন এটি ঘটে, যদি কোনও ব্যবহারকারী এজেন্ট তাদের কোনও পরিষেবাতে রাখে, তাদের কি তাদের বিদ্যমান কোডটি সংশোধন করার দরকার আছে?


2
আপনি নিশ্চয়ই সিঙ্ক্রোনাস এক্সএমএলএইচটিটিপি'র বিষয়ে কথা বলছেন, অ্যাসিঙ্ক্রোনাসগুলি নয়, সঠিক? সিঙ্ক্রোনাস অনুরোধগুলি শেষ ব্যবহারকারীর অভিজ্ঞতার জন্য ভয়ঙ্কর (তারা অনুরোধের সময় ব্রাউজারটিকে লক করে রাখে) এবং সাধারণত ব্যবহার করা উচিত নয়।
jਫਰ00

2
এমন কিছু কোড সরবরাহ করুন যা এটি ট্রিগার করে
Charlietfl

3
এটি কি প্রশ্নে পুরো পাঠ্য? মূল থ্রেডের সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকেস্টটি শেষ ব্যবহারকারীর অভিজ্ঞতার ক্ষতিকারক প্রভাবগুলির কারণে হ্রাস করা হয়।
কোয়ান্টাস 94 ভারী

1
jQuery কেবল সিঙ্ক্রোনাস অনুরোধগুলির জন্য সেই সতর্কতা দেয়, তাই না? আপনি কি ইচ্ছাকৃতভাবে একটি সুসংগত অনুরোধ করছেন? যদি তা হয় তবে সমাধানটি হ'ল অ্যাসিক্রোনাস অনুরোধগুলির সাথে কাজ করার জন্য আপনার কোডটি গঠন করা, যা আপনার যাইহোক করা উচিত কারণ তারা ব্যবহারকারীর দৃষ্টিকোণ থেকে খুব সুন্দর n
nnnnnn

1
আমি এই পতাকাটি কেবল আমার ওয়েবসাইটেই দেখেছি, আমি এটি অন্য কয়েকটি, যেমন ইউটিউবও দেখেছি। স্পেসিফিকেশন সম্পর্কে, কোন কোডের সাথে আমার কোডটি ডাব্লু 3 সি বা WHATWG এর মেনে চলতে হবে? , রেফারেন্স আমি মূল থ্রেডের মধ্যে জানতে চাই না কারণ এটি অনুমান করা মতামত হিসাবে এটি পতাকাঙ্কিত হবে। @ কোয়ান্টাস 94 হ্যাভি
এড

উত্তর:


136

এই সতর্কতা এড়াতে, ব্যবহার করবেন না:

async: false

আপনার যে কোনও $.ajax()কলে এটি হ'ল এটির একমাত্র বৈশিষ্ট্য XMLHttpRequest

ডিফল্টটি হ'ল async: true, তাই আপনি যদি কখনও এই বিকল্পটি ব্যবহার না করেন তবে বৈশিষ্ট্যটি সত্যিই সরানো থাকলে আপনার কোডটি নিরাপদ হওয়া উচিত।

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

লক্ষ্য করুন যে যে Fetchএপিআই প্রতিস্থাপন করছে XMLHttpRequestতা এমনকি সিঙ্ক্রোনাস বিকল্পও দেয় না।


9
এটি তখন jQuery এর সতর্কতা। আমি কি তা উপেক্ষা করতে পারি? আমি সার্ভারে সিঙ্ক্রোনাস কল ব্যবহার করি না। আমার পারফেকশনিস্ট পক্ষটি সাবধানতা থাকা মোটেই পছন্দ করে না।
জর্ডান

2
@ জর্ডান আমার মনে হয় সতর্কতাটি ব্রাউজার থেকে আসছে, jQuery নয়। আপনি যখন সিঙ্ক্রোনাস এজেএক্স ব্যবহার করার চেষ্টা করবেন তখনই এটি ঘটবে। আপনি যদি jQuery ব্যবহার করেন তবে তা কেবল তখনই ঘটবে যদি আপনি সেই বিকল্পটি নির্দিষ্ট করে থাকেন $.ajax
বার্মার

2
আমি ব্যবহার করছি jquery.i18n.properties.jsতবে আমার পক্ষ থেকে $.ajax.সম্ভবত অভ্যন্তরীণভাবে কোনও সুস্পষ্ট কল নেই তবে নিশ্চিত নয়।
ম্যানুয়েল জর্ডান

1
এই প্লাগইন .propertiesফাইলগুলি থেকে রিসোর্স বান্ডিলগুলি লোড করে। এটি সম্ভবত এটি করতে সিঙ্ক্রোনাস এজেএক্স ব্যবহার করছে, যার ফলে এই সতর্কতা দেখা দিয়েছে।
বার্মার

1
@ ম্যানুয়েলজর্ডান অ্যাসিঙ্ক সেট করছে: আই 18n এ সত্যটি ধীর সংযোগে আপনার পৃষ্ঠায় প্রদর্শিত স্ট্রিংগুলি প্রদর্শন করতে বিলম্ব হতে পারে। পরিবর্তে স্ট্রিং কোডটি দেখান
সিয়োন ডিপি

62

গৃহীত উত্তরটি সঠিক, তবে আমি অন্য কারণ খুঁজে পেয়েছি যদি আপনি ভিজুয়াল স্টুডিও ২০১৩ বা ততোধিকের সাথে এএসপি.এনইটি-র অধীন বিকাশ করে থাকেন এবং নিশ্চিত হন যে আপনি কোনও সিঙ্ক্রোনাস এজাক্স অনুরোধ করেননি বা ভুল জায়গায় কোনও স্ক্রিপ্ট সংজ্ঞায়িত করেন নি।

সমাধানটি হ'ল ঘড়ির কাঁটার দিকে সামান্য রিফ্রেশ আইকন দ্বারা নির্দেশিত ভিএস টুলবার ড্রপডাউনটিতে "ব্রাউজার লিঙ্ক সক্ষম করুন" আনচেক করে "ব্রাউজার লিঙ্ক" বৈশিষ্ট্যটি অক্ষম করা to আপনি এটি করার সাথে সাথে পৃষ্ঠাটি পুনরায় লোড করার সাথে সাথে সতর্কতাগুলি থামানো উচিত!

ব্রাউজার লিঙ্কটি অক্ষম করুন

এটি কেবল স্থানীয়ভাবে ডিবাগ করার সময়ই হওয়া উচিত তবে সতর্কতার কারণটি জানতে পেরে এটি এখনও দুর্দান্ত।


এখানে বর্ণিত হিসাবে অভ্যন্তরীণ web.configযোগ করে কেউ অক্ষম করতে পারে : পোকনোসিসটেমস / সোফটওয়্যার-ডেভলপমেন্ট /<add key="vs:EnableBrowserLink" value="false" /><appSettings>
বিল

3
আমি মনে করি এটি কেবলমাত্র কনসোলে সতর্কতা বার্তাগুলি চালানোর জন্য একটি খারাপ পরামর্শ। ব্রাউজারলিঙ্কটি অক্ষম করুন এবং ব্রাউজারলিঙ্কটি যুক্ত করে এমন উত্পাদনশীলতা বর্ধনগুলি থেকে মুক্তি পান আপনি ব্রাউজার কনসোলে কোনও সতর্কতা বার্তা দেখতে পাবেন না? মাইক্রোসফ্টের সাথে বাগ ফাইল করা আরও ভাল এবং এটি স্থির হয়ে যায়।
কোডিং 4fun

4
@ কোডিং4ফুন আপনার মতামতের জন্য ধন্যবাদ; আপনি মাইক্রোসফ্টের সাথে একটি বাগ ফাইল করতে দ্বিধা বোধ করতে পারেন আমি বলছিলাম না যে আপনার ব্রাউজার লিঙ্কটি অক্ষম করা উচিত। আমার উত্তরটি কিছু ক্ষেত্রে এই সতর্কতার কারণ হিসাবে যথাযথ এবং আপনার নিজের কোডে কিছু বাতিল করা কার্যকর। আমি ব্যক্তিগতভাবে আরও ভাল অনুভব করলাম যখন আমি বুঝতে পারি যে এটি আমার ভুল করা কিছু নয় এবং ভেবেছিলাম যে অন্যরাও এটি সহায়ক হতে পারে।
স্যাম

এটি কেবল এজাক্স সতর্কতার চেয়ে আরও বেশি স্থির হয়েছে। আমি এস্প কোর ব্যবহার করে জাভাস্ক্রিপ্ট কনসোলে সমস্ত ধরণের ব্রাউজার লিঙ্ক মেস পেয়েছি।
জোবাস

যে কেউ ব্রাউজার লিঙ্কটি কী তা জানতে পারে এবং কেন এটি এমন সতর্কতা দেওয়া শেষ করে?
জিদোন

15

শরীরের অংশটি শেষ হওয়ার ঠিক আগে মাথার বাইরে বাহ্যিক জেএসের সাথে একটি লিঙ্ক রেখে আমার সাথে এটি ঘটেছিল। আপনি জানেন, এর মধ্যে একটি:

<script src="http://somesite.net/js/somefile.js">

জিকুয়েরির সাথে এর কোনও যোগসূত্র ছিল না।

আপনি সম্ভবত একইভাবে কিছু করতে দেখবেন:

var script = $("<script></script>");
script.attr("src", basepath + "someotherfile.js");
$(document.body).append(script);

তবে আমি সেই ধারণাটি পরীক্ষা করিনি।


আমি যখন এই জাতীয় একটি লাইন সরিয়ে ফেললাম, তখন আমি এই সতর্কতাটি দূরে সরে গেলাম: আমি যেভাবেই ব্যবহার করছিলাম না: @ এইচটিএমএল.স্প্রিপ্ট ("~ / স্ক্রিপ্টস / অ্যাপ্লিকেশন / অ্যাপনাম.জেএস")
এমএসটিপ্প

10

এটি @ হেনরি-চ্যান দ্বারা মন্তব্য হিসাবে উল্লেখ করা হয়েছিল , তবে আমি মনে করি এটি আরও কিছু মনোযোগের দাবিদার:

আপনি যখন jQuery / জাভাস্ক্রিপ্ট ব্যবহার করে নতুন এইচটিএমএল সহ কোনও উপাদানের বিষয়বস্তু আপডেট করেন এবং এই নতুন এইচটিএমএলতে <script>ট্যাগ থাকে, সেগুলি সিঙ্ক্রোনিকভাবে কার্যকর করা হয় এবং এইভাবে এই ত্রুটিটি ট্রিগার করে। স্টাইলশীটগুলির ক্ষেত্রে একই।

আপনি জানেন XHRযে কনসোল উইন্ডোতে (একাধিক) স্ক্রিপ্ট বা স্টাইলশিটগুলি লোড হচ্ছে দেখলে এটি ঘটছে । (Firefox)।


3

পূর্ববর্তী উত্তরগুলির মধ্যে কোনওটিই (যা সব সঠিক) আমার অবস্থার সাথে উপযুক্ত নয়: আমি asyncপ্যারামিটারটি ব্যবহার jQuery.ajax()করি না এবং যে লিখিত সামগ্রীটি ফিরে আসছিল তার অংশ হিসাবে আমি কোনও স্ক্রিপ্ট ট্যাগ অন্তর্ভুক্ত করি না:

<div> 
     SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

আমার পরিস্থিতি হ'ল আমি একই সাথে দুটি ডিভগুলি আপডেট করার লক্ষ্য নিয়ে ধারাবাহিকভাবে দুটি এজেএক্স অনুরোধ কল করছি:

function f1() {
     $.ajax(...); // XMLHTTP request to url_1 and append result to div_1
}

function f2() {
     $.ajax(...); // XMLHTTP request to url_2 and append result to div_2
}

function anchor_f1(){
$('a.anchor1').click(function(){
     f1();
})
}

function anchor_f2(){
$('a.anchor2').click(function(){
     f2();
});
}

// the listener of anchor 3 the source of problem
function anchor_problem(){
$('a.anchor3').click(function(){
     f1();
     f2();
});
}

anchor_f1();
anchor_f2();
anchor_problem();

আমি যখন ক্লিক করি তখন a.anchor3এটি সতর্কতা পতাকাটি উত্থাপন করে click()function

function anchor_problem(){
$('a.anchor_problem').click(function(){
     f1();
     $('a.anchor_f2').click();
});
}

5
স্ক্রিপ্টগুলি কার্যকর করা হয় না যদি আপনি সেগুলি আন্তঃএইচটিএমএলের মাধ্যমে সরাসরি ডিওমে .োকান। সুতরাং যখন আপনি .html () কল করেন, jQuery এইচটিএমএল প্রতিক্রিয়াতে অন্তর্ভুক্ত যে কোনও স্ক্রিপ্ট সিঙ্ক্রোনজভাবে আনা এবং কার্যকর করে।
হেনরি চ্যান

@ হেনরিচান, আমি আপনাকে বোঝার চেষ্টা করেছি কিন্তু কোন ফল হয় নি। আপনি কি আমাকে সহজ কথায় ব্যাখ্যা করতে পারেন? আমি ডিওমে স্ক্রিপ্টগুলি সন্নিবেশ করি না, আমি কেবল এইচটিএমএল সন্নিবেশ করি এবং এখনও এই সমাধানটি আমার পক্ষে একমাত্র কার্যকরী সমাধান। অগ্রিম ধন্যবাদ
আদিব অরওি

2
@ হোয়াইটলেটটারসিনব্ল্যাঙ্কপ্যাপার্স আমার মনে হয় তার অর্থ: আপনার এজাক্স কলব্যাকের অভ্যন্তরে যদি আপনি আপনার "ডিভ" এর লিখিত ট্যাগগুলিকে অন্তর্ভুক্ত করেন তবে এগুলি সিঙ্ক্রোনালি বলা হবে।
হাইথাম স্নিলিমে

1

আমার কর্মশালা: আমি কোডটি একটি বাফারে ডাম্পিংয়ের মতো অ্যাসিনক্রোনাস অনুরোধগুলি ব্যবহার করি। আমি প্রতি সেকেন্ডে বাফারটি পরীক্ষা করছি op বাফারে ডাম্প পৌঁছে গেলে আমি কোডটি কার্যকর করি exec আমি একটি টাইমআউটও ব্যবহার করি। শেষ ব্যবহারকারীর জন্য পৃষ্ঠাটি এমনভাবে কাজ করে যাতে সিঙ্ক্রোনাস অনুরোধগুলি ব্যবহৃত হত।


কীভাবে এটি অর্জন করতে হয় তা জানতে আমার কাছে আপনার কাছে কিছুটা কোড রয়েছে?
ZerOne

5
@ রুনব্যাক, সম্পন্ন () প্রতিশ্রুতি কলব্যাক ব্যবহার করা যাবে না? $.ajax({ url : "example.com", async : true /* default is true */ }).done(function(response){ // Process the dump }) আশা করি আমি ভুল কিছু পড়িনি।
প্রভিন

0

আমরা যদি আংশিক দৃষ্টিতে স্ক্রিপ্ট লোড করি তবে এই সমস্যাটি আসবে

  1. আমি স্ক্রিপ্টটি আংশিক দৃশ্যে সরিয়ে প্রধান ভিউতে চলে এসেছি।

এই সমাধানটি আমার পক্ষে কাজ করছে

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