aj .জ্যাক্স - ডেটা টাইপ


135

পার্থক্য কি

contentType: "application/json; charset=utf-8",
dataType: "json",

বনাম

contentType: "application/json",
dataType: "text",

উত্তর:


181
  • contentTypeসার্ভারে প্রেরিত এইচটিটিপি শিরোনাম , নির্দিষ্ট বিন্যাস নির্দিষ্ট করে।
    উদাহরণ: আমি জেএসএন বা এক্সএমএল প্রেরণ করছি
  • dataTypeআপনি কী ধরনের প্রতিক্রিয়া আশা করছেন তা jQuery বলছেন ।
    জেএসওএন, বা এক্সএমএল, বা এইচটিএমএল ইত্যাদির প্রত্যাশা ডিফল্ট jQuery এটিকে চেষ্টা করে দেখতে হবে।

$.ajax()ডকুমেন্টেশন এগুলোর পূর্ণ বিবরণ হিসাবে ভাল হয়েছে।


আপনার নির্দিষ্ট ক্ষেত্রে, প্রথম জিজ্ঞাসা করা হয় জন্য প্রতিক্রিয়া হতে UTF-8, দ্বিতীয় গ্রাহ্য না করে। এছাড়াও প্রথমটি জাভাস্ক্রিপ্ট অবজেক্ট হিসাবে প্রতিক্রিয়াটিকে চিকিত্সা করছে , দ্বিতীয়টি এটি স্ট্রিং হিসাবে বিবেচনা করবে।

সুতরাং প্রথমটি হবে:

success: function(data) {
  // get data, e.g. data.title;
}

দ্বিতীয়:

success: function(data) {
  alert("Here's lots of data, just a string: " + data);
}

1
কোনটি সবচেয়ে বেশি পছন্দ করা উপায় বা সর্বাধিক প্রস্তাব দেওয়া হয়।
নিক কাহন

1
@ অ্যাডু - এর কোনও প্রত্যক্ষ উত্তর নেই, ফলাফলের সাথে আপনি কী করতে চান তা নির্ভর করে ... তারা 2 টি ভিন্ন ভিন্ন কাজ করছে। আদর্শভাবে, যদি এটি খুব সহজ ফলাফল না হয় আপনি সম্ভবত JSON এর সাথে কাজ করতে চান যে ক্ষেত্রে প্রথমটিটি আরও সহজ হতে পারে।
নিক ক্র্যাভার

2
মুসা ঠিক আছে, কনটেন্টটাইপ নির্দেশ করে যে আমরা কোন ফর্ম্যাটটি সার্ভারে প্রেরণ করছি (অর্থাত্ পোস্ট বডি), যা অনুরোধ করা হচ্ছে তা ফিরে নয়।
এন্টিনোম

@ 2 জনের মধ্যে প্রায় 2 জন সাধারণত খুব যুক্ত হন, এটি বেশিরভাগ জায়গাতে উদাহরণস্বরূপ স্ট্যাক ওভারফ্লোতে গুরুত্বপূর্ণ। কড়া কথায় বলতে গেলে তারা স্বাধীন, আমি এটি প্রতিফলিত করার জন্য আপডেট করেছি।
নিক ক্র্যাভার

ডিফল্ট কী তা আমি এখনও খুঁজে পাবার মতো জায়গা নেই, মানে আমি ম্যানুয়াল যাচ্ছি এবং প্রতিটি কল করার পরে অবজেক্টটি পুনর্নির্মাণ করছি, তবে পুনরায় সেট করার ক্ষেত্রে আমার সমস্যা হচ্ছে। আমি যদি এটি ডিফল্ট হিসাবে 'জসন' এ সেট করি তবে কোনওভাবেই এটি বুদ্ধিমান অনুমানের পরিপূরক হবে না, তবে এটি নির্দিষ্ট পরিমাণে কাজ করে, যতক্ষণ না এটি নির্দিষ্ট করা কলটিতে পৌঁছে যায় (এটি কোনও জেএসওএন কল নয়), তবে যদি আমি এটি খালি স্ট্রিং, বা নালায় সেট করি তবে মনে হয় এটি সবকিছু ভেঙে গেছে। আমি কি 'ডিফল্ট' বা 'ইন্টেলজেন্ট অনুমান' এর মতো কোনও কিছুর জন্য সেট করতে পারি? প্রযুক্তিগত ডিফল্ট কী, অর্থাত্ দুটি কোটের মধ্যে সংজ্ঞায়িত হিসাবে dataType = ""?
ব্লেম

51

(পিএস: নিক ক্র্যাভারের দেওয়া উত্তরটি ভুল)

কনটেন্টটাইপ অনুরোধের অংশ হিসাবে সার্ভারে প্রেরণ করা ডেটার ফর্ম্যাট নির্দিষ্ট করে (এটি প্রতিক্রিয়া হিসাবে খুব বেশি পরে প্রেরণ করা যেতে পারে)।

ডেটা টাইপ ক্লায়েন্ট (ব্রাউজার) দ্বারা প্রাপ্ত ডেটা প্রত্যাশিত বিন্যাস নির্দিষ্ট করে।

দুটোই বদলযোগ্য নয়।

  • contentTypeসার্ভারে পাঠানো শিরোনামটি হ'ল সার্ভারে ডেটা ফর্ম্যাট (অর্থাত্ বার্তার মূল অংশের সামগ্রী) নির্দিষ্ট করে। এটি পোস্ট এবং পুট অনুরোধগুলির সাথে ব্যবহৃত হয়। সাধারণত আপনি যখন পোষ্ট অনুরোধটি প্রেরণ করেন, বার্তাটির বডিটিতে প্যারামিটারগুলি যেমন থাকে:

==============================

নমুনা অনুরোধ:

POST /search HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
<<other header>>

name=sam&age=35

==============================

"নাম = সাম এবং বয়স = 35" এর উপরের সর্বশেষ লাইনটি বার্তাটির প্রধান অংশ এবং বিষয়বস্তু টাইপ এটিকে অ্যাপ্লিকেশন / x-www-form-urlencoded হিসাবে নির্দিষ্ট করে যেহেতু আমরা বার্তার মূল অংশে ফর্মের পরামিতিগুলি পার করছি। তবে আমরা কেবলমাত্র প্যারামিটারগুলি প্রেরণে সীমাবদ্ধ নই, আমরা জেসন, এক্সএমএল, ... প্রেরণ করতে পারি (বিভিন্ন ধরণের ডেটা প্রেরণ বিশেষত আরএসটিফুল ওয়েব পরিষেবাদির সাথে দরকারী):

==============================

নমুনা অনুরোধ:

POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>

<order>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

সুতরাং এবার কনটেন্টটাইপ হ'ল: অ্যাপ্লিকেশন / এক্সএমএল, কারণ আমরা যা পাঠাচ্ছি। উপরোক্ত উদাহরণগুলিতে নমুনা অনুরোধ দেখানো হয়েছে, একইভাবে সার্ভারের কাছ থেকে প্রাপ্ত প্রতিক্রিয়াতে কন্টেন্ট-টাইপ শিরোনামও থাকতে পারে যাতে সার্ভারটি কী পাঠাচ্ছে তা উল্লেখ করে:

==============================

নমুনা প্রতিক্রিয়া:

HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>

<order id="233">
   <link rel="self" href="http://example.com/orders/133"/>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

  • dataTypeপ্রত্যাশার প্রতিক্রিয়াটির ফর্ম্যাট নির্দিষ্ট করে। এটি হেডার গ্রহণের সাথে সম্পর্কিত। জিকুয়ারি প্রতিক্রিয়ার সামগ্রী-প্রকারের ভিত্তিতে এটি নির্ধারণের চেষ্টা করবে।

==============================

নমুনা অনুরোধ:

GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>

==============================

উপরের অনুরোধটি সার্ভার থেকে এক্সএমএল প্রত্যাশা করছে।

আপনার প্রশ্ন সম্পর্কে,

contentType: "application/json; charset=utf-8",
dataType: "json",

এখানে আপনি ইউটিএফ 8 অক্ষর সেট ব্যবহার করে জসন ডেটা প্রেরণ করছেন এবং আপনি সার্ভার থেকে জেসন ডেটা প্রত্যাশা করছেন। ডেটা টাইপের জন্য জিকুয়েরি ডক্স অনুসারে,

জসন প্রকারটি আনীত ডেটা ফাইলটিকে জাভাস্ক্রিপ্ট অবজেক্ট হিসাবে বিশ্লেষণ করে এবং ফলাফলের ডেটা হিসাবে নির্মিত অবজেক্টটিকে ফেরত দেয়।

সুতরাং সাফল্যের হ্যান্ডলারে আপনি যা পান তা হ'ল যথাযথ জাভাস্ক্রিপ্ট অবজেক্ট (জিকুয়ারি আপনার জন্য জসন বস্তুকে রূপান্তর করে)

যেহেতু

contentType: "application/json",
dataType: "text",

এখানে আপনি জসন ডেটা প্রেরণ করছেন, যেহেতু আপনি জিকুয়েরি ডক্স অনুসারে এনকোডিংয়ের কথা উল্লেখ করেননি,

যদি কোনও চরসেট নির্দিষ্ট না করা থাকে তবে সার্ভারের ডিফল্ট চরসেট ব্যবহার করে ডেটা সার্ভারে স্থানান্তরিত হবে; আপনার অবশ্যই এটি সার্ভারের দিকে যথাযথভাবে ডিকোড করুন।

এবং যেহেতু ডেটা টাইপটি পাঠ্য হিসাবে নির্দিষ্ট করা হয়েছে, তাই আপনি যা সাফল্য হ্যান্ডলারে পেয়েছেন তা সরল পাঠ্য, ডাটা টাইপের জন্য ডক্স অনুসারে,

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


7

অনুযায়ী ডক্স :

  • "json": প্রতিক্রিয়াটিকে JSON হিসাবে মূল্যায়ন করে এবং একটি জাভাস্ক্রিপ্ট অবজেক্ট প্রদান করে। JQuery 1.4 এ JSON ডেটা কঠোরভাবে পার্স করা হয়েছে; যে কোনও ত্রুটিযুক্ত জেএসওএন প্রত্যাখ্যান করা হয় এবং একটি বিশ্লেষণ ত্রুটি নিক্ষেপ করা হয়। (সঠিক JSON ফর্ম্যাটিংয়ের আরও তথ্যের জন্য json.org দেখুন))
  • "text": একটি সরল পাঠ্য স্ট্রিং।

2

আপনি এক সাথে দুটি এপিআই কল করলে jQuery Ajax লোডার ভাল কাজ করে না। এই সমস্যাটি সমাধান করার জন্য আপনাকে isAsyncএজ্যাক্স সেটিংয়ের সম্পত্তি ব্যবহার করে একের পর এক API গুলি কল করতে হবে । আপনার সেটিংসে কোনও ত্রুটি না ঘটানো উচিত তাও নিশ্চিত করতে হবে। অন্যথায়, লোডার কাজ করবে না। যেমন অপরিজ্ঞাপিত সামগ্রী-প্রকার, POST / PUT / DELETE / GET কলের জন্য ডেটা-টাইপ।


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