সার্ভারে একটি JSON প্রেরণ এবং JQuery ব্যতীত জেএসএন পুনরুদ্ধার করা


115

আমাকে সার্ভারে একটি জেএসএন (যা আমি স্ট্রিংফাই করতে পারি) প্রেরণ করতে এবং ব্যবহারকারীর পক্ষের JSON পুনরুদ্ধার করতে, JQuery ব্যবহার না করেই করতে হবে।

আমার যদি জিইটি ব্যবহার করা উচিত তবে আমি কীভাবে প্যারামিটার হিসাবে জেএসএন পাস করব? এটি খুব দীর্ঘ হবে কি ঝুঁকি আছে?

যদি আমার কোনও পোষ্ট ব্যবহার করা উচিত তবে আমি কীভাবে onloadজিইটি-তে কোনও ফাংশনের সমতুল্য সেট করব ?

নাকি আমার আলাদা পদ্ধতি ব্যবহার করা উচিত?

REMARK

এই প্রশ্নটি কোনও সাধারণ এজেএক্স প্রেরণের বিষয়ে নয়। এটি সদৃশ হিসাবে বন্ধ করা উচিত নয়।


আপনার ব্যবহার করা দরকার XMLHttpRequest। নাম সত্ত্বেও, আপনি এটি JSON ডেটার জন্য ব্যবহার করতে পারেন (এবং এটি আসলে jQuery ব্যাকগ্রাউন্ডে এটি করে কীভাবে)।
এলিক্সনাইড

2
আমি ডেটা পোস্ট করব। এটি দেখুন: youmightnotneedjquery.com । এটি দেখায় যে আপনি কীভাবে ভ্যানিলা জেএস এর সাথে ডেটা পেতে / পোস্ট করতে পারবেন।
হাউকুর হাফ

1
@ এড কোটরেল রেফারেন্সযুক্ত প্রশ্নের এইটির সাথে কোনও সম্পর্ক নেই। রেফারেন্সটি (JUST) সম্পর্কে sendingএকটি এজ্যাক্স অনুরোধ নিচ্ছে , যা বেশ সাধারণ বিষয়। এটি একের জন্য sendingএবং receiving JSONখাঁটি জাভাস্ক্রিপ্টের জন্য জিজ্ঞাসা করছে । তদ্ব্যতীত, এই জেএসএনকে ফেরত পাঠানোর জন্য, আপনাকে কীভাবে সমস্যার এই অংশটি সমাধান করতে হবে তা জানতে হবে server-sideযা রেফারেন্সযুক্ত প্রশ্নের উপরে উল্লেখ করা হয়নি।
hex494D49

1
@ এড কোটরেল আপনি যে প্রশ্নের উল্লেখ করেছেন তার একটি অনুমোদিত উত্তর নেই এবং অ্যাজাক্স অনুরোধ তৈরি করতে পুরানো পদ্ধতি ব্যবহার করে। এটি এই প্রশ্নের সম্পূর্ণ উত্তর সরবরাহ করে না। আমার প্রশ্নটি aতিহ্যবাহী আজাক্স পোস্ট বা জিইটি-র তুলনায় আরও সূক্ষ্ম। আপনি বিন্দু মিস করেছেন।
জেরুমে ভার্সট্রিঞ্জ

1
নীচের স্বীকৃত উত্তর দ্বারা দেখানো হিসাবে onreadystatechangeআপনি যা অনুকরণ করতে ব্যবহার করেন @ জেভেরস্ট্রি হ'ল onload। পার্সিংয়ের জন্য, আপনি কেবল ব্যবহার করুন JSON.parse()(আবার, উত্তরে দেখানো হয়েছে), তবে আমি ধরেই নিয়েছিলাম যে আপনি ইতিমধ্যে জানতেন যেহেতু আপনি প্রশ্নটিতে স্ট্রিংফাইংয়ের কথা বলেছেন। এই পয়েন্টগুলি জুড়ে আপনাকে 1 নয় 2 টি প্রশ্নের দিকে নির্দেশ করে আমি আপনাকে সাহায্য করার চেষ্টা করেছি। স্পষ্টতই কিছু পার্থক্য রয়েছে - খুব কমই 2 টি প্রশ্ন হুবহু এক রকম হয় - তবে আপনি যদি জেএসএনকে কীভাবে স্ট্রিংফাইস করতে এবং পার্স করতে হয় তা যদি আপনি ইতিমধ্যে জানেন তবে এটি ক্ষুদ্র। এটি বলেছে যেহেতু আপনি এবং @ hex494D49 দ্বিমত পোষণ করছেন, তাই আমি এটি আবার চালু করার জন্য মনোনীত করছি।
এলেক্সেনাইড

উত্তর:


221

POST পদ্ধতিটি ব্যবহার করে JSON ফর্ম্যাটে ডেটা পাঠানো এবং গ্রহণ করা

// Sending and receiving data in JSON format using POST method
//
var xhr = new XMLHttpRequest();
var url = "url";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
var data = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
xhr.send(data);

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

// Sending a receiving data in JSON format using GET method
//      
var xhr = new XMLHttpRequest();
var url = "url?data=" + encodeURIComponent(JSON.stringify({"email": "hey@mail.com", "password": "101010"}));
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
xhr.send();

পিএইচপি ব্যবহার করে সার্ভার-সাইডে JSON ফর্ম্যাটে ডেটা হ্যান্ডলিং

<?php
// Handling data in JSON format on the server-side using PHP
//
header("Content-Type: application/json");
// build a PHP variable from JSON sent using POST method
$v = json_decode(stripslashes(file_get_contents("php://input")));
// build a PHP variable from JSON sent using GET method
$v = json_decode(stripslashes($_GET["data"]));
// encode the PHP variable to JSON and send it back on client-side
echo json_encode($v);
?>

এইচটিপিপি অনুরোধের দৈর্ঘ্যের সীমা 2kB - 8kB থেকে ব্যবহৃত সার্ভার এবং ক্লায়েন্ট (ব্রাউজার) উভয়ের উপর নির্ভর করে। যদি কোনও ইউআরআই সার্ভার হ্যান্ডল করতে পারে তার চেয়ে দীর্ঘ হয় তবে সার্ভারটির 414 (অনুরোধ-ইউআরআই খুব দীর্ঘ) স্থিতি ফিরে আসা উচিত।

দ্রষ্টব্য কেউ বলেছিলেন যে আমি রাষ্ট্রীয় মানের পরিবর্তে রাষ্ট্রের নাম ব্যবহার করতে পারি; অন্য কথায় আমি এর xhr.readyState === xhr.DONEপরিবর্তে ব্যবহার করতে পারি xhr.readyState === 4সমস্যাটি হ'ল ইন্টারনেট এক্সপ্লোরার বিভিন্ন রাষ্ট্রের নাম ব্যবহার করে তাই রাষ্ট্রীয় মানগুলি ব্যবহার করা আরও ভাল।


4
হওয়া উচিত xhr.status === 200
কিড

আমি স্থানীয় কোডের হোস্ট করা REST XHR failed loading: POST
এপিএসে

@viveksinghggits প্রথমে, উপরে থেকে কোডটি আপনার লোকালহোস্টে কাজ করে কিনা তা পরীক্ষা করে দেখুন। যদি এটি করে (এবং এটি কাজ করা উচিত) তবে সমস্যাটি অবশ্যই আপনার সার্ভারের কোথাও থাকা উচিত; যদি এটি না হয় তবে আমাকে জানান এবং আমি এটি যাচাই করব। এইভাবে, আপনার কোডের কিছুই নেই, আমি আপনাকে সহায়তা করতে পারি না।
hex494D49

@ hex494D49 আপনার প্রতিক্রিয়াটির জন্য অনেক ধন্যবাদ, আমি ফর্মটির জমা দেওয়ার ক্রিয়ায় আসলে এক্সএইচআরকে গুলি চালিয়ে যাচ্ছিলাম, যখন আমি এটিকে পরিবর্তন ক্লিক করে একটি ক্লিক ইভেন্টের দ্বারা বরখাস্ত করা হয়েছিল। আমি সিওআরএস ত্রুটি পেয়েছি, এটি বোধগম্য এবং আমি তার জন্য আমার সার্ভার সাইড কোডটি পরিবর্তন করছি। আমি এখানে এটি সম্পর্কে লিখেছেন medium.com/@viveksinghggits/...
viveksinghggits

6

নতুন এপিআই আনতে ব্যবহার :

const dataToSend = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
let dataRecieved=""; 
fetch("",{credentials:'same-origin',mode:'same-origin',method:"post",body:dataToSend})
              .then(resp => {
                if(resp.status==200){
                   return resp.json()
                }else{
                    console.log("Status: "+resp.status);
                    return Promise.reject("server")
                }
              })
           .then(dataJson =>{
                 dataToRecieved = JSON.parse(dataJson);
             })
              .catch(err =>{
                if(err=="server")return
                console.log(err);
            })
            
             
যখন সার্ভার 200 (ঠিক আছে) এর পরিবর্তে অন্য স্থিতি প্রেরণ করবে তখন আপনাকে হ্যান্ডেল করা দরকার, আপনি সেই ফলাফলটি প্রত্যাখ্যান করতে পারেন কারণ আপনি যদি এটি ফাঁকা রেখে যান তবে এটি জসনকে পার্স করার চেষ্টা করবে কিন্তু সেখানে নেই, সুতরাং এটি একটি ত্রুটি ছুঁড়ে দেবে


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