Jquery - কীভাবে p। পোষ্ট () কনটেন্টটাইপ = অ্যাপ্লিকেশন / জেসন ব্যবহার করবেন?


308

আমি লক্ষ করেছি যে jquery এ p। পোষ্ট () ব্যবহার করার সময় যখন ডিফল্ট কনটেন্টটাইপটি অ্যাপ্লিকেশন / x-www-form-urlencoded হয় - যখন আমার এসপিএন এমভিসি কোডের বিষয়বস্তু টাইপ = অ্যাপ্লিকেশন / জেসন থাকা দরকার

(আমাকে কেন অ্যাপ্লিকেশন / জেসন ব্যবহার করতে হবে এ জন্য এই প্রশ্নটি দেখুন: এএসপনেট এমভিসি - মডেলস্টেট কেন হয়? এই ক্ষেত্রটির কোনও মূল্য থাকে না কেন "এক্স ক্ষেত্রের প্রয়োজন হয়"? )

আমি কীভাবে $। পোষ্ট () কনটেন্ট টাইপ = অ্যাপ্লিকেশন / জসন প্রেরণ করতে পারি? আমার ইতিমধ্যে $। ​​পোষ্ট () ফাংশন রয়েছে, তাই আমি $ .ajax () এ পরিবর্তন করতে চাই না কারণ এতে খুব বেশি সময় লাগবে

যদি আমি চেষ্টা করি

$.post(url, data, function(), "json") 

এটিতে এখনও কন্টেন্টটাইপ = অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded রয়েছে। সুতরাং "json" পরম ঠিক কী করে যদি এটি কনটেন্টটিপটিকে জসনতে পরিবর্তন করে না?

যদি আমি চেষ্টা করি

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

এটি কাজ করে তবে আমার থাকা প্রতিটি একক get .গেজ এবং ost। পোষ্টকে প্রভাবিত করে এবং কারও কারও বিরতি ঘটায়।

তাহলে কি এমন কোনও উপায় আছে যে আমি কনটেন্ট টাইপ = অ্যাপ্লিকেশন / জেসন প্রেরণে $। পোষ্ট () এর আচরণ পরিবর্তন করতে পারি?

উত্তর:


70

আমার মনে হয় আপনারও হতে পারে

১. পোস্টটি সর্বদা JSON ডেটা টাইপ ব্যবহার করার জন্য উত্সটি সংশোধন করুন কারণ এটি প্রাক কনফিগার করা $.ajaxকলের জন্য কেবলমাত্র একটি শর্টকাট is

অথবা

২. আপনার নিজস্ব ইউটিলিটি ফাংশনটি সংজ্ঞায়িত করুন $.ajaxযা আপনি ব্যবহার করতে চান কনফিগারেশনের শর্টকাট

অথবা

৩. $.post functionআপনি নিজের প্রয়োগটি বানরের প্যাচিংয়ের মাধ্যমে ওভাররাইট করতে পারেন ।

আপনার উদাহরণের JSON ডেটাটাইপ সার্ভার থেকে ফেরানো ডেটাটাইপকে বোঝায় এবং সার্ভারে প্রেরণ করা ফর্ম্যাটটি নয় ।


5
+1, আমি একটি নতুন পদ্ধতি বা ওভার রাইটিং jQuery.postপদ্ধতি সংজ্ঞায়িত করতে যাচ্ছি এটি একটি খুব সাধারণ কাজ ...
সিএমএস

3
এটি কোনও খারাপ ধারণা নয়, কেবল $ .mvcpost () নামে একটি পদ্ধতি তৈরি করুন যা $। পোষ্ট (লিঙ্কযুক্ত কোডটি অনুলিপি করে) এর মতো করে এবং বিষয়বস্তুর ধরন পরিবর্তন করে। তারপরে পরিবর্তন করা দরকার এমন সমস্ত পোষ্ট () এর জন্য, আমাকে সামনের দিকে 3 টি অতিরিক্ত অক্ষর লিখতে হবে। এগুলি $ .জ্যাক্স () হিসাবে পুনরায় লেখার চেয়ে অনেক দ্রুত।
জে.কে।

9
@ পাভেলরেপিন, আমাকে পে-লোডে JSON.stringif () কল করতে হয়েছিল
উস্তামান সংগীত

2
@ ড্রাগন - এখানে 3 সমাধান রয়েছে যে "বিষয়বস্তু টাইপ = অ্যাপ্লিকেশন / জেসসন প্রেরণে আমি p। পোষ্ট () এর আচরণ পরিবর্তন করতে পারি এমন কোনও উপায় আছে?" কোন অংশটি উত্তর নয়?
রাশ ক্যাম

2
এটি জেনে রাখাও গুরুত্বপূর্ণ: aj .জ্যাক্স এবং এটির বিভিন্ন পদ্ধতি আপনি যে ডেটা দিয়েছেন তার উপর ভিত্তি করে কনটেন্টটাইপটি কী (এটি নির্দিষ্ট না করা) হওয়া উচিত তা অনুমান করার চেষ্টা করবে। একটি বস্তু হিসাবে "mystring data"হবে application/x-www-form-urlencoded;যেখানে { anyKey: "anyvalue and type" }হবে application/json। অনেক সার্ভার যা জেসন পড়ে, কেবল কোনও বস্তু বা অ্যারেরকে অনুমতি দেয়, স্ট্রিংকে নয় - সুতরাং কেন জিকারি এই বিষয়গুলি ভবিষ্যদ্বাণী করে। যদি আপনার এমন কোনও সার্ভার থাকে যা কোনও বস্তুতে আবৃত না হয়ে স্ট্রিং, সংখ্যা ইত্যাদির পাঠ করে তবে আপনাকে অবশ্যই এই উত্তরের মতো সামগ্রী-প্রকারটি নির্দিষ্ট করতে হবে।
bzuillsmith

395
$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
})

দেখুন: jQuery.ajax ()


13
মূল পোস্টটি জিজ্ঞাসা করে: "তাহলে কি এমন কোনও উপায় আছে যে আমি কন্টেন্ট টাইপ = অ্যাপ্লিকেশন / জেসন প্রেরণে $। পোষ্ট () এর আচরণ পরিবর্তন করতে পারি?" তবে এটিতে এটিও "এটি কাজ করে তবে আমার একক get। গেজেট এবং $ .পোস্টকে প্রভাবিত করে এবং কিছুকে ভেঙে দেয়।" আমি "p। পোষ্ট ব্যবহার করে একই জিনিস অর্জন করতে পারি তবে content .get এবং $ .পোস্টের অন্যান্য ঘটনাগুলি ভঙ্গ না করে সঠিক কন্টেন্টটাইপ প্রেরণ করা" হিসাবে এই প্রশ্নটি বুঝতে পারি। এটা কি ভুল?
এড্রিয়েন

5
@ x1a4 স্পষ্টভাবে বুঝতে পারে না যে .জ্যাক্স কল, অজেক্সসেটআপ নয়
ওয়াকার

39
@ অ্যাড্রেইন, এটির জন্য দু'বছর পরে, আপনার উত্তরটি আমি যখন এটি গুগল করার সময় খুঁজছিলাম is
আশ্চর্যজনকভাবে

74
ব্যবহার করতে হয়েছিল JSON.stringify(data), যেহেতু সার্ভারটি আশা করে যে কোনও জেএসএন স্ট্রিং এবং jQuery কেবলমাত্র এম্পারস্যান্ডগুলি, ফর্ম-ইউরেলকোড ব্যবহার করে মূল-মান জোড়গুলিকে সম্মতি জানাবে।
ড্রাগন

3
এমনকি চার বছর পরেও, এই উত্তরটি আমার দশ ঘণ্টারও কম কোডের সন্ধানের ঘন্টাগুলি সমাধান করেছে।
পিটার ভিডিই

86

পরিশেষে আমি সমাধানটি পেয়েছি, যা আমার পক্ষে কাজ করে:

jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: JSON.stringify({data:"test"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});

8
আমি কেন ত্রুটি পেতে থাকলাম তা বুঝতে পারি নি, আপনাকে ডেটা স্ট্রাইফাই করতে হবে।
ফ্রেন্ডলিগুই

5
আমি এই কাজগুলি জানি, তবে কেন ওহ আপনার কেন স্ট্রিংফাই করা দরকার? এটি কি jQuery বাগ? এটিতে আপনার dataযুক্তিটিকে সিরিয়ালিয়াল করতে পুরোপুরি খুশি মনে হচ্ছে x-www-form-urlencoded, তবে আপনি যদি অনুরোধ সামগ্রীর dataধরণটি JSON বলে উল্লেখ করেন তবে এটি এখনও কোনও মিল না পাওয়া ফর্ম্যাটে প্রেরণে জোর দেয় ।
পাভেল রেপিন

আমরা হব. আমি এটি খুব খনন করি না। আমি এটা খুশি ছিল কাজ করে। ;) আমার সার্ভারে জেএসওএন প্রয়োজন।
vvkatwss vvkatwss

একই অবস্থা. JSON.stringify ছাড়া এটি কাজ করে না, আমি ভাবছি কেন।
জন সিমো

42

আমি আমার স্ক্রিপ্টে jQuery এ নিম্নলিখিত পদ্ধতিটি যুক্ত করে শেষ করেছি:

jQuery["postJSON"] = function( url, data, callback ) {
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        url: url,
        type: "POST",
        contentType:"application/json; charset=utf-8",
        dataType: "json",
        data: data,
        success: callback
    });
};

এবং এটি ব্যবহার করতে

$.postJSON('http://url', {data: 'goes', here: 'yey'}, function (data, status, xhr) {
    alert('Nailed it!')
});

এটি মূল জিকুয়ের উত্স থেকে "get" এবং "পোস্ট" কোডটি অনুলিপি করে এবং একটি JSON পোস্টকে বাধ্য করার জন্য কয়েকটি পরামিতি হার্ডকড করেই করা হয়েছিল।

ধন্যবাদ!


2
যথারীতি - সর্বোত্তম উত্তরটি পার্টিতে সর্বশেষ আসে এবং এতে সর্বনিম্ন উত্সাহিত হয়; (
নিকবিব 3

দুর্দান্ত উত্তর - realize। পোস্ট "বাক্সের বাইরে" এটি করে না তা বুঝতে সময় লাগবে।

21

শুধু ব্যবহার করুন

jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: mydata,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});

আপডেট করা @ জে কে: আপনি যদি আপনার প্রশ্নে $। পোষ্ট সহ একটি কোড উদাহরণ লিখেন তবে উত্তরটিতে একটি অনুরূপ উদাহরণ খুঁজে পাবেন। আপনি যতক্ষণ না জেনে অবধি ইতিমধ্যে অধ্যয়ন করেছেন সেই একই তথ্যের পুনরাবৃত্তি করতে চাই না: p .পোস্ট এবং $ .গেট $ .জ্যাক্সের সংক্ষিপ্ত রূপ forms সুতরাং কেবলমাত্র aj .ajax ব্যবহার করুন এবং কোনও বিশ্বব্যাপী সেটিংস পরিবর্তন না করে আপনি এর পরামিতিগুলির পুরো সেটটি ব্যবহার করতে পারেন।

উপায় দ্বারা আমি স্ট্যান্ডার্ড $। পোস্টে ওভাররাইট করার প্রস্তাব দিই না। এটি আমার ব্যক্তিগত মতামত , তবে আমার জন্য এটি গুরুত্বপূর্ণ, কেবলমাত্র প্রোগ্রামটি কাজ করে না, যারা আপনার প্রোগ্রামটি পড়েন তারা সকলেই একইভাবে বোঝে। খুব গুরুত্বপূর্ণ কারণ ছাড়াই স্ট্যান্ড রাইটিং স্ট্যান্ডার্ড পদ্ধতিগুলি পড়ার ক্ষেত্রে ভুল বোঝাবুঝি অনুসরণ করতে পারে প্রোগ্রাম কোডটি ক্ষেত্রে । তাই আমি আমার সুপারিশ আরো এক সময় পুনরাবৃত্তি: শুধু মূল $ ব্যবহার .ajax পরিবর্তে jQuery এর গঠন jQuery.getএবং jQuery.postএবং আপনার প্রোগ্রাম গ্রহণ না শুধুমাত্র যা পুরোপুরি কাজ, কিন্তু কোনো ভুল বোঝাবুঝি ছাড়া মানুষ পড়া যায়।


1
দুর্দান্ত ব্যাখ্যা এবং গাইডলাইন
বেদ প্রকাশ

8

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

সত্যিই আপনার সেরা বেটটি একটি এজ্যাক্স () কলটিতে স্যুইচ করা। পোস্ট () ফাংশনটি সুবিধার্থে বোঝানো হয়েছে; আপনি যখন কেবল একটি সাধারণ ফর্ম পোস্টিং করছেন তখন এজ্যাকের () কলটির একটি সহজ সংস্করণ। আপনি না।

আপনি যদি সত্যিই স্যুইচ করতে না চান, আপনি নিজের নিজস্ব ফাংশন ডেকে বলতে পারেন, এক্সপোস্ট () করতে পারেন এবং এটি কেবলমাত্র সামগ্রীর ধরণের সেট সহ jQuery অ্যাজ্যাক্স () কলের জন্য প্রদত্ত প্যারামিটারগুলিকে প্যারামিটারে রূপান্তর করতে পারে। এইভাবে, post সমস্ত পোস্ট () ফাংশনগুলিকে আজাক্স () ফাংশনে পুনরায় লেখার পরিবর্তে আপনাকে কেবল সেগুলি পোস্ট থেকে xpost (বা যাই হোক না কেন) এ পরিবর্তন করতে হবে।


এটি কেবলমাত্র $। পোষ্ট () পদ্ধতিগুলি যা একটি এসপ নেটওয়্যার এমভিসি নিয়ন্ত্রক পদ্ধতিতে কল করে যা পরিবর্তিত হওয়া দরকার। খাঁটি জ্যাকুইরিগুলি অপরিবর্তিত হওয়া উচিত (স্বতঃসম্পূর্ণ, ডায়ালগলগ, জকিগ্রিড ইত্যাদি) আমি আশা করছিলাম যে প্রাসঙ্গিক $। পোষ্ট () এর ক্ষেত্রে আমি একটি সাধারণ পরিবর্তন আনতে পারি। তবে দেখে মনে হচ্ছে এগুলি আমার $ .জ্যাক্স () এ রূপান্তর করা দরকার। এটি একটি বিশাল এবং খুব এজ্যাক ভারী অ্যাপ্লিকেশন, তাই তাদের অনেকগুলি পরিবর্তন করতে হবে।
জে.কে।

5

আমি জানি এটি একটি দেরী উত্তর, আমার কাছে একটি শর্টকাট পদ্ধতি আছে যা আমি এমএস ভিত্তিক পরিষেবাগুলিতে / থেকে পোস্টিং / পড়ার জন্য ব্যবহার করি .. এটি এমভিসি পাশাপাশি এএসএমএক্স ইত্যাদির সাথেও কাজ করে ...

ব্যবহার করুন:

$.msajax(
  '/services/someservice.asmx/SomeMethod'
  ,{}  /*empty object for nothing, or object to send as Application/JSON */
  ,function(data,jqXHR) {
    //use the data from the response.
  }
  ,function(err,jqXHR) {
    //additional error handling.
  }
);
//sends a json request to an ASMX or WCF service configured to reply to JSON requests.
(function ($) {
  var tries = 0; //IE9 seems to error out the first ajax call sometimes... will retry up to 5 times

  $.msajax = function (url, data, onSuccess, onError) {
    return $.ajax({
      'type': "POST"
      , 'url': url
      , 'contentType': "application/json"
      , 'dataType': "json"
      , 'data': typeof data == "string" ? data : JSON.stringify(data || {})
      ,beforeSend: function(jqXHR) {
        jqXHR.setRequestHeader("X-MicrosoftAjax","Delta=true");
      }
      , 'complete': function(jqXHR, textStatus) {
        handleResponse(jqXHR, textStatus, onSuccess, onError, function(){
          setTimeout(function(){
            $.msajax(url, data, onSuccess, onError);
          }, 100 * tries); //try again
        });
      }
    });
  }

  $.msajax.defaultErrorMessage = "Error retreiving data.";


  function logError(err, errorHandler, jqXHR) {
    tries = 0; //reset counter - handling error response

    //normalize error message
    if (typeof err == "string") err = { 'Message': err };

    if (console && console.debug && console.dir) {
      console.debug("ERROR processing jQuery.msajax request.");
      console.dir({ 'details': { 'error': err, 'jqXHR':jqXHR } });
    }

    try {
      errorHandler(err, jqXHR);
    } catch (e) {}
    return;
  }


  function handleResponse(jqXHR, textStatus, onSuccess, onError, onRetry) {
    var ret = null;
    var reterr = null;
    try {
      //error from jqXHR
      if (textStatus == "error") {
        var errmsg = $.msajax.defaultErrorMessage || "Error retreiving data.";

        //check for error response from the server
        if (jqXHR.status >= 300 && jqXHR.status < 600) {
          return logError( jqXHR.statusText || msg, onError, jqXHR);
        }

        if (tries++ < 5) return onRetry();

        return logError( msg, onError, jqXHR);
      }

      //not an error response, reset try counter
      tries = 0;

      //check for a redirect from server (usually authentication token expiration).
      if (jqXHR.responseText.indexOf("|pageRedirect||") > 0) {
        location.href = decodeURIComponent(jqXHR.responseText.split("|pageRedirect||")[1].split("|")[0]).split('?')[0];
        return;
      }

      //parse response using ajax enabled parser (if available)
      ret = ((JSON && JSON.parseAjax) || $.parseJSON)(jqXHR.responseText);

      //invalid response
      if (!ret) throw jqXHR.responseText;  

      // d property wrap as of .Net 3.5
      if (ret.d) ret = ret.d;

      //has an error
      reterr = (ret && (ret.error || ret.Error)) || null; //specifically returned an "error"

      if (ret && ret.ExceptionType) { //Microsoft Webservice Exception Response
        reterr = ret
      }

    } catch (err) {
      reterr = {
        'Message': $.msajax.defaultErrorMessage || "Error retreiving data."
        ,'debug': err
      }
    }

    //perform final logic outside try/catch, was catching error in onSuccess/onError callbacks
    if (reterr) {
      logError(reterr, onError, jqXHR);
      return;
    }

    onSuccess(ret, jqXHR);
  }

} (jQuery));

দ্রষ্টব্য: আমার কাছে একটি JSON.parseAjax পদ্ধতিও রয়েছে যা json.org এর জেএস ফাইল থেকে পরিবর্তিত হয়েছে, যা এমএস "/ তারিখ(...)/" তারিখগুলির জন্য হ্যান্ডলিং যুক্ত করে ...

পরিবর্তিত json2.js ফাইলটি অন্তর্ভুক্ত নেই, এটি আই 8 এর ক্ষেত্রে স্ক্রিপ্ট ভিত্তিক পার্সার ব্যবহার করে, কারণ আপনি অ্যারে এবং / অথবা অবজেক্টের প্রোটোটাইপ প্রসারিত করার সময় নেটিভ পার্সার বিচ্ছিন্ন হওয়ার ঘটনা রয়েছে etc.

প্রতিশ্রুতি ইন্টারফেসগুলি বাস্তবায়নের জন্য আমি এই কোডটি পুনর্নির্মাণের বিষয়টি বিবেচনা করছি, তবে এটি আমার পক্ষে সত্যই কার্যকর হয়েছে।


5

Simple.PostJSON () এর জন্য এই সহজ jquery এপিআই এক্সটেনশন (থেকে: https://benjamin-schweizer.de/jquerypostjson.html ) কৌশলটি করে। আপনি অন্যান্য অন্যান্য নেটিভ জ্যাকোয়ারি আজাক্স কলের মতো পোস্ট জেএসএন () ব্যবহার করতে পারেন। আপনি ইভেন্ট হ্যান্ডলারগুলি ইত্যাদি সংযুক্ত করতে পারেন।

$.postJSON = function(url, data, callback) {
  return jQuery.ajax({
    'type': 'POST',
    'url': url,
    'contentType': 'application/json; charset=utf-8',
    'data': JSON.stringify(data),
    'dataType': 'json',
    'success': callback
  });
};

অন্যান্য অ্যাজাক্স এপিআইয়ের মতো (অ্যাঙ্গুলারজেএস থেকে $ HTTP এর মতো) এটি অ্যাপ্লিকেশন / জসনকে সঠিক কন্টেন্ট টাইপ সেট করে। আপনি এখানে আপনার জসন ডেটা (জাভাস্ক্রিপ্ট অবজেক্টস) সরাসরি পাস করতে পারেন, কারণ এটি এখানে স্ট্রিংফাই হয়ে গেছে। প্রত্যাশিত প্রত্যাশিত ডেটা টাইপটি JSON এ সেট করা আছে। আপনি প্রতিশ্রুতিগুলির জন্য jquery এর ডিফল্ট ইভেন্ট হ্যান্ডলার সংযুক্ত করতে পারেন, উদাহরণস্বরূপ:

$.postJSON(apiURL, jsonData)
 .fail(function(res) {
   console.error(res.responseText);
 })
 .always(function() {
   console.log("FINISHED ajax post, hide the loading throbber");
 });

4

বিষয়টির কেন্দ্রবিন্দুতে এই বিষয়টি হ'ল যে জিকুয়ের লেখার সময় পোস্ট জেএসওন পদ্ধতি নেই যখন জেএসএসএন উপস্থিত থাকে এবং সঠিক কাজ করে।

একটি পোস্ট জেএসওএন পদ্ধতি নিম্নলিখিতটি করবে:

postJSON = function(url,data){
    return $.ajax({url:url,data:JSON.stringify(data),type:'POST', contentType:'application/json'});
};

এবং এটি ব্যবহার করা যেতে পারে:

postJSON( 'path/to/server', my_JS_Object_or_Array )
    .done(function (data) {
        //do something useful with server returned data
        console.log(data);
    })
    .fail(function (response, status) {
        //handle error response
    })
    .always(function(){  
      //do something useful in either case
      //like remove the spinner
    });

1

ডকুমেন্টেশন বর্তমানে অনুষ্ঠান 3.0 হিসাবে, .post $ সেটিংস আপত্তি গ্রহণ করবে, যার মানে হল আপনি $ .ajax অপশন ব্যবহার করতে পারেন। 3.0 প্রকাশিত হয় নি এবং প্রতিশ্রুতিতে তারা ডকসগুলিতে এটির রেফারেন্স গোপন করার বিষয়ে কথা বলছে, তবে ভবিষ্যতে এটি সন্ধান করুন!


1

নিম্নলিখিত জাভাস্ক্রিপ্ট কোডটি নিয়ে আমার একই রকম সমস্যা ছিল:

var url = 'http://my-host-name.com/api/Rating';

var rating = { 
  value: 5,
  maxValue: 10
};

$.post(url, JSON.stringify(rating), showSavedNotification);

কোথায় বেহালাবাদক আমি অনুরোধ দেখতে পারে:

  • শিরোলেখ: Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  • শারীরিক: {"value":"5","maxValue":"5"}

ফলস্বরূপ, আমার সার্ভার কোনও সার্ভার-সাইড প্রকারে কোনও বস্তুর মানচিত্র তৈরি করতে পারে না।

শেষ লাইনে এটিতে পরিবর্তন করার পরে:

$.post(url, rating, showSavedNotification);

ফিডলারের মধ্যে আমি এখনও দেখতে পেলাম:

  • শিরোলেখ: Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  • শারীরিক: value=5&maxValue=10

যাইহোক, সার্ভারটি আমার প্রত্যাশা অনুযায়ী ফিরে আসা শুরু করে।


0

আপনার নিজের অ্যাডাপ্টার / র‌্যাপার সম্পর্কে কীভাবে?

//adapter.js
var adapter = (function() {

return {

    post: function (url, params) {
        adapter.ajax(url, "post", params);
        },
    get: function (url, params) {
        adapter.ajax(url, "get", params);
    },
    put: function (url, params) {
        adapter.ajax(url, "put", params);
    },
    delete: function (url, params) {
        adapter.ajax(url, "delete", params);
    },
    ajax: function (url, type, params) {
        var ajaxOptions = {
            type: type.toUpperCase(),
            url: url,
            success: function (data, status) {
                var msgType = "";
                // checkStatus here if you haven't include data.success = true in your
                // response object
                if ((params.checkStatus && status) || 
                   (data.success && data.success == true)) {
                            msgType = "success";
                            params.onSuccess && params.onSuccess(data);
                    } else {
                            msgType = "danger";
                            params.onError && params.onError(data);
                    }
            },
            error: function (xhr) {
                    params.onXHRError && params.onXHRError();
                    //api.showNotificationWindow(xhr.statusText, "danger");
            }
        };
        if (params.data) ajaxOptions.data = params.data;
        if (api.isJSON(params.data)) {
            ajaxOptions.contentType = "application/json; charset=utf-8";
            ajaxOptions.dataType = "json";
        }
        $.ajax($.extend(ajaxOptions, params.options));
    }
})();

    //api.js
var api = {
  return {
    isJSON: function (json) {
        try {
            var o = JSON.parse(json);
            if (o && typeof o === "object" && o !== null) return true;
        } catch (e) {}
        return false;
    }
  }
})();

এবং অত্যন্ত সহজ ব্যবহার:

adapter.post("where/to/go", {
    data: JSON.stringify(params),
    onSuccess: function (data) {
        //on success response...
    }
    //, onError: function(data) {  //on error response... }
    //, onXHRError: function(xhr) {  //on XHR error response... }
});

চেষ্টা করেছেন কিন্তু প্রত্যাশিত ফলাফল পাচ্ছেন না। আমার স্প্রিং বুট রেস্ট এপিআই রয়েছে।
সুরজ শিঙ্গাদে

0

কোনও কারণে @ অ্যাড্রিয়েন পরামর্শ দিয়েছেন যে এজ্যাক্স অনুরোধে সামগ্রীর প্রকারটি সেট করা আমার ক্ষেত্রে কাজ করবে না। তবে, আপনি আসলে এটির আগে $। পোস্ট ব্যবহার করে সামগ্রীর ধরণ পরিবর্তন করতে পারেন:

$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('application/json; charset=utf-8');
    },
});

তারপরে আপনার $.postকল করুন:

$.post(url, data, function(), "json")

আমার jQuery + আইআইএস নিয়ে সমস্যা ছিল এবং এটিই একমাত্র সমাধান যা জিকুয়েরিকে এজ্যাক্স অনুরোধগুলির জন্য উইন্ডোজ -১২২২ এনকোডিং ব্যবহার করতে বুঝতে সহায়তা করেছিল।


0

আমরা পোষ্টে এই জাতীয় বিষয়বস্তু পরিবর্তন করতে পারি can

p। পোস্ট (ইউআরএল, ডেটা, ফাংশন (ডেটা, স্ট্যাটাস, এক্সএইচআর)) h xhr.setRequestHeader ("বিষয়বস্তুর ধরণ", "অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded; চরসেট = utf-8");;);


-1

you আপনার কাছে সিওআরএস (ক্রস অরিজিন রিসোর্স ভাগ করে নেওয়া) সমস্যা থাকলে পোষ্টটি কাজ করে না। নিম্নলিখিত বিন্যাসে $ .আজাক্সটি ব্যবহার করার চেষ্টা করুন: "aj .জ্যাক্স ({url: someurl, সামগ্রী টাইপ: 'অ্যাপ্লিকেশন / জেসন', তথ্য: অনুরোধআইএনএসএস ফর্ম্যাট, শিরোনাম: Access 'অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স': '*'}, ডেটা টাইপ: 'জসন', টাইপ করুন: 'পোস্ট', এসিঙ্ক: মিথ্যা, সাফল্য: ফাংশন (ডেটা) {...}}); "


-19

আপনি application/jsonসরাসরি পাঠাতে পারবেন না - এটি একটি জিইটি / পোস্ট অনুরোধের প্যারামিটার হতে হবে।

তাই কিছু

$.post(url, {json: "...json..."}, function());

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