jQuery পোস্টের অনুরোধ বদ্ধে বৈধ json


180

সুতরাং jQuery Ajax ডক্স অনুসারে , অনুরোধগুলি প্রেরণের সময় এটি কোয়েরি স্ট্রিং আকারে ডেটাটিকে সিরিয়ালাইজ করে, তবে সেটিংয়ের processData:falseফলে আমার শরীরে আসল JSON প্রেরণ করা উচিত। দুর্ভাগ্যক্রমে আমার প্রথমে নির্ধারণ করতে খুব কষ্ট হচ্ছে, যদি এটি ঘটে থাকে এবং ২ য় বিষয়টি সার্ভারে প্রেরণ করা হচ্ছে তবে অবজেক্টটি কেমন দেখাচ্ছে। আমি শুধু জানি যে সার্ভারটি আমি যা পাঠাচ্ছি পার্স করছে না।

আক্ষরিক কোনও পোস্ট পোস্ট করার জন্য HTTP ক্লায়েন্ট ব্যবহার করার সময় {someKey:'someData'}এটি কাজ করে। তবে jQuery এর সাথে ব্যবহার করার সময় data: {someKey:'someData'}এটি ব্যর্থ হয়। দুর্ভাগ্যক্রমে আমি যখন সাফারিতে অনুরোধটি বিশ্লেষণ করি তখন এটি বলেছে বার্তা পেডলোডটি [object Object]দুর্দান্ত ... এবং ফায়ারফক্সে পোস্টটি ফাঁকা ...

জাভা সাইডে বডি কন্টেন্ট লগ করার সময় এটি আক্ষরিক হয়ে যায় [object Object]তাই কেউ কীভাবে বাস্তব জেএসএন ডেটা পাঠায় ??

JQuery থেকে প্রেরিত অনুরোধের সাথে, অনুরোধ সংস্থায় JSON ডেটা সিরিয়ালকরণ করার জন্য কোনও জাভা পরিষেবা নিয়ে অভিজ্ঞতা আছে?

বিটিডাব্লু এখানে পুরো aj .জ্যাক্স অনুরোধ:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

উত্তর:


293

একটি আসল জেএসওন অনুরোধটি এর মতো দেখাবে:

data: '{"command":"on"}',

যেখানে আপনি একটি আসল JSON স্ট্রিং প্রেরণ করছেন। আরও সাধারণ সমাধানের জন্য, JSON.stringify()জেএসএন-তে কোনও বস্তুর সিরিয়ালাইজ করতে ব্যবহার করুন :

data: JSON.stringify({ "command": "on" }),

পুরানো ব্রাউজারগুলিকে সমর্থন করার জন্য যার JSONঅবজেক্টটি নেই, json2.js ব্যবহার করুন যা এতে যুক্ত হবে।


বর্তমানে যা ঘটছে তা হ'ল processData: falseএটি আপনার মূলত এটি প্রেরণ করছে: ({"command":"on"}).toString()যা হ'ল [object Object]... আপনি আপনার অনুরোধে যা দেখছেন।


তাহলে আমার আর প্রসেসডাটা দরকার নেই: ভুয়া ব্যবহার JSON.stringify()?
ব্র্যাড

6
@ ব্র্যাড - সঠিক, এটি করার পরে এটি কোনও ব্যাপার নয় কারণ এটি ইতিমধ্যে একটি স্ট্রিং, এবং সেক্ষেত্রে jQuery এটি আরও প্রক্রিয়া করবে না
নিক ক্র্যাভার

2
একটি মোহন মত কাজ, অনেক ধন্যবাদ! তাহলে কি সত্য যে সমস্ত অনুরোধ সংস্থাগুলি অন্য প্রান্তে পার্স হওয়ার মতো স্ট্রিংগুলি প্রত্যাশা করে?
ব্র্যাড

জিকুয়ারি dataকেবল JSON হিসাবে পাঠানোর বিপরীতে কেন jQuery স্ট্রিংকে পার্স করে ?
অ্যাডাম জেরনার

সাইড নোট: যদি কেহ একটি "শরীর অনুরোধ পে লোড" ফর্ম ডেটা পরিবর্তে দরকার ভুলবেন না অন্তর্ভুক্ত করা contentType: "application/json; charset=utf-8",এই থ্রেড হিসাবে উল্লেখ করেছে: stackoverflow.com/questions/21201270/...
raydlevel5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.