Aj .axax এর সাথে কোয়েরি স্ট্রিংয়ের পরিবর্তে কীভাবে JSON প্রেরণ করবেন?


172

কেউ কী কীভাবে কোনও প্রশ্নের স্ট্রিংয়ের পরিবর্তে আসল জেএসএন প্রেরণ করতে কীভাবে সহজ উপায়ে ব্যাখ্যা করতে পারেন?

$.ajax({
    url      : url,
    dataType : 'json', // I was pretty sure this would do the trick
    data     : data,
    type     : 'POST',
    complete : callback // etc
});

এটি প্রকৃতপক্ষে আপনার সাবধানে প্রস্তুত JSON কে একটি ক্যোরি স্ট্রিংয়ে রূপান্তরিত করবে। একটি বিরক্তিকর জিনিস হ'ল array: []আপনার অবজেক্টের যে কোনওটিকে রূপান্তর করা হবে array[]: []সম্ভবত ক্যোরি স্টিংয়ের সীমাবদ্ধতার কারণে।


7
dataTypeডেটা কিভাবে পাঠানো হয় কোন প্রভাব ফেলে। এটা নিছক নির্দিষ্ট করে আপনি আছে আশা কোন ডেটা টাইপ করা হয় ফিরে কল দ্বারা। যদি আপনি সার্ভারের কাছে নির্দেশ করতে চান যে কী ধরণের ডেটা আপনি সেই dataবৈশিষ্ট্যে নির্দিষ্ট করছেন যা আপনার নিজের contentTypeমতো সম্পত্তি সেট করতে হবেcontentType: "application/json"
Nope

স্পষ্ট করার জন্য ধন্যবাদ। তবে সেক্ষেত্রে, সার্ভার প্রতিক্রিয়াতে একটি সামগ্রী-টাইপ শিরোনাম সরবরাহ করে থাকলে আমাকে কেন প্রতিক্রিয়ার ধরণের ক্লায়েন্ট-সাইড নির্দিষ্ট করতে হবে?
রেডসান্দ্রো

2
আপনি না আছে , এটা উল্লেখ করার ডিফল্টরূপে jQuery এর চেষ্টা করুন এবং একটি বুদ্ধিমান সাড়া MIME প্রকার উপর ভিত্তি করে অনুমান করতে হবে। তবে এটি নির্দিষ্ট করে আপনি jQuery স্পষ্টভাবে বলছেন যে আপনি সার্ভারের কাছ থেকে কী ধরণের প্রত্যাশা করছেন এবং jQuery সেই ধরণের কোনও বস্তুর প্রতিক্রিয়া রূপান্তরিত করার চেষ্টা করবে। এটি নির্দিষ্ট না করা এবং jQuery কে অনুমান না রেখে jQuery এর প্রতিক্রিয়াটিকে একটি অপ্রত্যাশিত বিন্যাসে রূপান্তরিত করতে পারে, যদিও আপনি সার্ভার থেকে JSON প্রেরণ করেছেন। : ডাটাটাইপ আরও বিশদের জন্য ডকুমেন্টেশন চেক api.jquery.com/jQuery.ajax
নাঃ

উত্তর:


256

JSON.stringifyআপনাকে প্রথমে আপনার অবজেক্টটি জেএসএন-তে সিরিয়ালাইজ করতে ব্যবহার করতে হবে এবং তারপরে contentTypeআপনার সার্ভারটি বুঝতে পারে এটি জেএসএন specify এই কৌতুক করতে হবে:

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

নোট করুন যে JSONবস্তুটি ব্রাউজারগুলিতে জাভাস্ক্রিপ্ট ১.7 / ইসমাস্ক্রিপ্ট ৫ বা তার পরে সমর্থন করে native যদি আপনার লিগ্যাসি সমর্থন দরকার হয় আপনি json2 ব্যবহার করতে পারেন ।


14
এটি কাজ করবে না, আপনি মিস করছেন contentType: 'application/json'
ওহগোডভি

@ ওহগোদ্বি ওহ হ্যাঁ এটি কিছুটা দ্রুত চলে গেছে;)
মেকওয়াল

1
ধন্যবাদ। আমি ভেবেছিলাম ডেটা টাইপ এটি যত্ন নিয়েছে তবে আমি তা পিছনে পেয়েছি। বার্গির মতো বিষয়বস্তুর ধরণে চরসেট নির্দিষ্টকরণের বিষয়ে অন্য কোনও উত্তর কী করেছে?
রেডসান্দ্রো

5
@ রেডস্যান্ড্রো এটির প্রয়োজন হবে না। JQuery ডক্স অনুসারে:POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
mekwall

1
@ shorif2000 আগের চেয়ে আরও দেরী ... সমস্যাটি হ'ল $_POSTপিএইচপি তে আপনি কেবল দেখতে পাচ্ছেন application/x-www-form-urlencoded, আপনি যদি file_get_contents("php://input")json_decode()
জসন

28

না, dataTypeবিকল্পটি প্রাপ্ত ডেটা পার্স করার জন্য।

জেএসএন পোস্ট করতে, আপনাকে নিজের মাধ্যমে এটিকে আরও শক্তিশালী করতে হবে JSON.stringifyএবং processDataবিকল্পটি সেট করতে হবে false

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    processData: false,
    contentType: "application/json; charset=UTF-8",
    complete: callback
});

নোট করুন যে সমস্ত ব্রাউজারগুলি এই JSONঅবজেক্টটিকে সমর্থন করে না , এবং jQuery .parseJSONথাকলেও এর কোনও স্ট্রিংফায়ার অন্তর্ভুক্ত নেই; আপনার আর একটি পলিফিল লাইব্রেরি লাগবে।


4
ইতিমধ্যে একটি স্ট্রিং ফেরত দেওয়ার কারণে সেট processDataকরা falseপ্রয়োজনীয় নয় JSON.stringify
মেকওয়াল

@ মার্কাসএকওয়াল: আফাইক এটি এখনও encodeURIComponentসম্পাদিত হবে, তাই না?
বার্গি

ঠিক আছে, এটির প্রয়োজন নাও হতে পারে, তবে আপনি কি সত্যিই মনে করেন এটি অনুরোধটিকে ব্যর্থ করে দেবে?
বার্গি 16

এটি ইতিমধ্যে স্ট্রিং বিবেচনা করে এটি ব্যর্থ হওয়া উচিত নয়।
কেভিন বি

1
@ রেডসান্দ্রো: হ্যাঁ, এটি একটি "বুদ্ধিমান অনুমান" করছে। যাইহোক, প্যারামিটারের কারণটি (কেবলমাত্র) এটি নয় যে লোকেরা এটি কঠোর করে তুলতে চায়, তবে আরও বেশি যে তারা তাদের সার্ভারের প্রতিক্রিয়াগুলিতে উপযুক্ত এমআইএমআই টাইপ সেট করে না।
বার্গি 21

5

যদিও আমি জানি এএসপি.নেট এমভিসি এর মতো অনেক আর্কিটেকচারটি JSON.stringify কে কনটেন্ট হিসাবে পরিচালনা করতে অন্তর্নির্মিত কার্যকারিতা রয়েছে আমার পরিস্থিতিটি কিছুটা আলাদা তাই সম্ভবত এটি ভবিষ্যতে কাউকে সহায়তা করতে পারে। আমি জানি এটি আমার ঘন্টা বাঁচাতে পারে!

যেহেতু আমার http অনুরোধগুলি আইবিএম (AS400 এনভায়রনমেন্ট) এর একটি পৃথক সাবডোমেনের সিজিআই এপিআই দ্বারা পরিচালিত হচ্ছে এই অনুরোধগুলি ক্রস উত্স, সুতরাং jsonp। আমি আসলে জাভাস্ক্রিপ্ট অবজেক্ট (গুলি) এর মাধ্যমে আমার এজ্যাক্স প্রেরণ করছি। এখানে আমার এজাক্স পোস্টের একটি উদাহরণ রয়েছে:

 var data = {USER : localProfile,  
        INSTANCE : "HTHACKNEY",  
        PAGE : $('select[name="PAGE"]').val(), 
        TITLE : $("input[name='TITLE']").val(), 
        HTML : html,
        STARTDATE : $("input[name='STARTDATE']").val(), 
        ENDDATE : $("input[name='ENDDATE']").val(),
        ARCHIVE : $("input[name='ARCHIVE']").val(), 
        ACTIVE : $("input[name='ACTIVE']").val(), 
        URGENT : $("input[name='URGENT']").val(), 
        AUTHLST :  authStr};
        //console.log(data);
       $.ajax({
            type: "POST",
           url:   "http://www.domian.com/webservicepgm?callback=?",
           data:  data,
           dataType:'jsonp'
       }).
       done(function(data){
         //handle data.WHATEVER
       });

2
এই প্রশ্নে আরও জ্ঞান যুক্ত করার জন্য ধন্যবাদ! সন্তোষজনক উত্তর ইতিমধ্যে দেওয়া হয়েছিল, কিন্তু আমি আপনার upvated।
রেডসান্দ্রো

1

আপনি যদি এ্যাসপ.net এ আবার প্রেরণ করছেন এবং অনুরোধের জন্য ডেটা প্রয়োজন হয়। [] তবে আপনার বিষয়বস্তুর ধরণটি "অ্যাপ্লিকেশন / x-www-form-urlencoded; চরসেট = utf-8" এ সেট করতে হবে

মূল পোস্ট এখানে

দ্বিতীয়ত ডেটাটাইপ থেকে মুক্তি পান, আপনার যদি ফেরার প্রত্যাশা না হয় তবে POST ব্যর্থ হওয়ার আগে প্রায় 4 মিনিট অপেক্ষা করবে। এখানে দেখুন

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