আমি কীভাবে জাভাস্ক্রিপ্ট ভেরিয়েবলে কোনও পাঠ্য ফাইলের বিষয়বস্তু লোড করব?


155

আমার ওয়েব অ্যাপ্লিকেশন HTTP: //localhost/foo.txt এর মূলে আমার কাছে একটি পাঠ্য ফাইল রয়েছে এবং আমি এটি জাভাস্ক্রিপ্টের একটি ভেরিয়েবলের মধ্যে লোড করতে চাই .. গ্রোভিতে আমি এটি করব:

def fileContents = 'http://localhost/foo.txt'.toURL().text;
println fileContents;

আমি কীভাবে জাভাস্ক্রিপ্টে অনুরূপ ফলাফল পেতে পারি?

উত্তর:


142

এক্সএমএলএইচটিপিআরকোয়েস্ট, অর্থাত্ এজেএক্স, এক্সএমএল ছাড়াই।

আপনি যা করছেন ঠিক সেই পদ্ধতিটি আপনি কী জাভাস্ক্রিপ্ট কাঠামোটি ব্যবহার করছেন তার উপর নির্ভরশীল তবে আমরা যদি আন্তঃব্যবহারযোগ্যতা বিষয়গুলিকে উপেক্ষা করি তবে আপনার কোডটি এমন কিছু দেখবে:

var ক্লায়েন্ট = নতুন এক্সএমএলএইচটিপিআরকোয়েস্ট ();
client.open ('GET', '/foo.txt');
ক্লায়েন্ট.অনডিস্টেটচেঞ্জ = ফাংশন () {
  সতর্কতা (client.responseText);
}
client.send ();

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

একটি অতিরিক্ত বিবেচনা: এটি কেবল তখনই কাজ করবে যতক্ষণ foo.txt একই ডোমেনে থাকে। যদি এটি অন্য কোনও ডোমেনে থাকে তবে সম-উত্সের সুরক্ষা নীতিগুলি আপনাকে ফলাফলটি পড়তে বাধা দেবে।


1
একই-উত্স নীতিটির একটি কার্যপ্রণালী JSONP ব্যবহার করছে যা jQuery দ্বারা সমর্থিত (ক্লায়েন্টের অংশের জন্য)
ওয়ানওয়ার্ড

3
এটি যুক্ত করা উপকারী হতে পারে, অনলাইনেস্টেটচেঞ্জের অভ্যন্তরে, আপনি এক্সএমএলএইচটিপিআরকোয়েস্ট অবজেক্টের রেডস্টেট সম্পত্তি অ্যাক্সেস করতে পারেন (উদাহরণে: ক্লায়েন্ট।ডিয়ারস্টেট) স্ট্যাটাসটি কী তা জানতে, যেহেতু ওপেনডেস্টেটচেঞ্জ ইভেন্টটি লোড, লোড, জন্য উত্থাপিত হয় ... .. সুতরাং আপনি ক্লায়েন্টের জন্য অপেক্ষা করতে হবে।
গেমএলচেমিস্ট 21

2
@ গেমএলচেমিস্ট: আপনার দুর্দান্ত উত্তরে হোঁচট খেয়েছে। আমি কেবল লক্ষ করতে চেয়েছিলাম যে বেশিরভাগ ব্রাউজারগুলিতে রেডিস্টেটটি উট কেসযুক্ত হয়, সুতরাং কোডটি এমন কিছু হওয়া উচিত:if (client.readyState === 4){ }
স্নরপেই

6
অতিরিক্তভাবে আপনি করতে client.onloadendএবং কেবল সম্পূর্ণ ডেটা পেতে পারেন
এথেনা

2
client.readyStateসম্পত্তির মূল্য পরীক্ষা করার জন্য উত্তরটি পুনরায় যোগাযোগ করা উচিত । আমি এটি না হওয়া পর্যন্ত এটিকে নিম্নমুখী করছি, লোকেরা উত্তরটি আবিষ্কার করতে মন্তব্যগুলি পড়বে না কেবল আংশিকভাবে সঠিক।
amn

84

এখানে আমি জিকিউরিয়ায় এটি কীভাবে করেছি:

jQuery.get('http://localhost/foo.txt', function(data) {
    alert(data);
});

যে প্লেইন ট্যাবুলার টেক্সট তথ্য (এর সাথে কাজ করা বলে মনে হচ্ছে না docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests )
pufferfish

7
লক্ষ্য করুন যে, এই কাজ আপনি এটা পরীক্ষা করছি যদি স্থানীয়ভাবে ব্যবহার না file://অর্থাত: file:///example.com/foo.html। ফায়ারফক্স একটি সিনট্যাক্স ত্রুটির অভিযোগ করে এবং ক্রোম ব্লক করে কারণ এটি এটিকে ক্রস-অরিজিনের অনুরোধ হিসাবে বিবেচনা করে।
অ্যাক্রোনিক্স

@ স্পফলিশ আপনি dataTypeপ্যারামিটারটি নির্দিষ্ট করে দিলে এটি সরল তথ্য দিয়ে কাজ করবে , api.jquery.com/jQuery.get/
yvesonline

1
@ অ্যাক্রোনিক্স যদি আপনি http://...অংশটি ছেড়ে যান , কারণ এটি একই ডোমেনে থাকে, এটি কাজ করবে, যেমন jQuery.get("foo.txt", ...)
yvesonline

@ এক্রোনিক্স স্থানীয়ভাবে এটি পরীক্ষা করার কোন সহজ উপায় আছে? আমি ক্রস-
আর্জি

50

আপডেট 2019: আনুন ব্যবহার:

fetch('http://localhost/foo.txt')
  .then(response => response.text())
  .then((data) => {
    console.log(data)
  })

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API


4
হ্যাঁ আনয়ন একটি (সাম্প্রতিক) স্ট্যান্ডার্ড, কোনও স্বত্বাধিকারী এক্সটেনশন নয়।
লরেন্ট কেললেট

1
এটি 2019, এবং আনতে হবে সৌন্দর্যের জিনিস। স্যামসুং ইন্টারনেট সহ সমস্ত আধুনিক ব্রাউজারের জন্য এটিই হ'ল, যা সবেমাত্র ধরা পড়েছে ...
ডেভ এভারিট

একটি কমপ্যাক্ট এবং ওয়ার্কিং কোড, ভিক, আপনাকে ধন্যবাদ। ত্রুটি পরিচালনা পরিচালনা করার জন্য, response.okআপনার কোডটিতে কিছু (বা সমমানের) রাখা কি সম্ভব ? আমি খুব অভিজ্ঞ নই fetch, সুতরাং এটি সেট করার সঠিক জায়গাটি আমার জানা নেই।
সোপালাজো ডি অ্যারিরিজ

দুর্দান্ত সমাধান। এটি একটি সম্পূর্ণ শিক্ষানবিশ এমনকি এমনকি খুব সহজ ছিল। শেষ ধাপে কনসোল.লগের পরিবর্তে চলকগুলিতে সঞ্চিত, এখন যে কোনও জায়গায় ব্যবহার করতে পারবেন।
এভারিফ্রিমান

27

আপনি যদি কেবল টেক্সট ফাইল থেকে ধ্রুব স্ট্রিং চান তবে আপনি এটি জাভাস্ক্রিপ্ট হিসাবে অন্তর্ভুক্ত করতে পারেন:

// This becomes the content of your foo.txt file
let text = `
My test text goes here!
`;
<script src="foo.txt"></script>
<script>
  console.log(text);
</script>

ফাইলটি থেকে লোড স্ট্রিংটি লোড হওয়ার পরে জাভাস্ক্রিপ্টে অ্যাক্সেসযোগ্য হয়ে ওঠে। `(ব্যাকটিক) অক্ষরটি আপনার পাঠ্য ব্লকটিতে" এবং "অক্ষর উভয়ের জন্য মঞ্জুরি দিয়ে একটি টেম্পলেটটি আক্ষরিক শুরু হয় এবং শেষ হয় ।

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


1
এটি সত্যিই চতুর সমাধান হবে। তবে টেমপ্লেট আক্ষরিক আইই ১১-তে সমর্থিত নয় এবং কোনও ফাংশন ব্লকের অভ্যন্তরে "লেট" পরিবর্তনশীল সুযোগের বাইরে থাকবে, সুতরাং এই প্রয়োগটি বিপদ পূর্ণ - সতর্ক থাকুন।
নেভিল

7

একটি বিষয় মনে রাখবেন যে জাভাস্ক্রিপ্ট ক্লায়েন্টের উপর চালায়, সার্ভারে নয়। আপনি জাভাস্ক্রিপ্টে সার্ভার থেকে সত্যই "একটি ফাইল লোড" করতে পারবেন না। যা ঘটে তা হ'ল জাভাস্ক্রিপ্ট সার্ভারে একটি অনুরোধ প্রেরণ করে এবং সার্ভারটি অনুরোধ করা ফাইলের সামগ্রীগুলি ফেরত পাঠায়। জাভাস্ক্রিপ্ট কীভাবে বিষয়বস্তু গ্রহণ করবে? কলব্যাক ফাংশনটি এটাই। এডওয়ার্ডের ক্ষেত্রে, এটি

    client.onreadystatechange = function() {

এবং ড্যানব এর ক্ষেত্রে, এটি হয়

 function(data) {

এই ফাংশনটি ডাকা হয় যখনই ডেটা উপস্থিত হয়। JQuery সংস্করণটি স্পষ্টভাবে Ajax ব্যবহার করে, এটি কেবল লাইব্রেরিতে কোডটি আবদ্ধ করে কোডিংটিকে সহজ করে তোলে।


7

আপডেট 2020: অ্যাসিঙ্ক / প্রতীক্ষার সাহায্যে আনুন

const response = await fetch('http://localhost/foo.txt');
const data = await response.text();
console.log(data);

দ্রষ্টব্য যে awaitকেবল কোনও asyncফাংশনে ব্যবহৃত হতে পারে । একটি দীর্ঘ উদাহরণ হতে পারে

async function loadFileAndPrintToConsole(url) {
  try {
    const response = await fetch(url);
    const data = await response.text();
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

loadFileAndPrintToConsole('https://threejsfundamentals.org/LICENSE');


5

এটি প্রায় সমস্ত ব্রাউজারে কাজ করা উচিত:

var xhr=new XMLHttpRequest();
xhr.open("GET","https://12Me21.github.io/test.txt");
xhr.onload=function(){
    console.log(xhr.responseText);
}
xhr.send();

অতিরিক্তভাবে, নতুন Fetchএপিআই রয়েছে:

fetch("https://12Me21.github.io/test.txt")
.then( response => response.text() )
.then( text => console.log(text) )

1

JQuery এর সাথে কাজ করার সময়, ব্যবহারের পরিবর্তে jQuery.get, যেমন

jQuery.get("foo.txt", undefined, function(data) {
    alert(data);
}, "html").done(function() {
    alert("second success");
}).fail(function(jqXHR, textStatus) {
    alert(textStatus);
}).always(function() {
    alert("finished");
});

আপনি ব্যবহার করতে পারেন .loadযা আপনাকে আরও বেশি ঘনীভূত ফর্ম দেয়:

$("#myelement").load("foo.txt");

.loadআপনাকে আংশিক পৃষ্ঠাগুলি লোড করার বিকল্প দেয় যা কার্যকর হতে পারে, দেখুন api.jquery.com/load/


-3

যদি আপনার ইনপুটটি এক্সএমএল হিসাবে কাঠামোযুক্ত হয় তবে আপনি importXMLফাংশনটি ব্যবহার করতে পারেন । (আরও তথ্য এখানে quirksmode এ )।

যদি এটি এক্সএমএল না হয় এবং প্লেইন পাঠ্য আমদানির জন্য সমতুল্য কার্যকারিতা না থাকে তবে আপনি এটি কোনও লুকানো আইফ্রেমে খুলতে পারেন এবং সেখান থেকে সামগ্রীগুলি পড়তে পারেন।

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