Jquery - วิธีสร้าง $. โพสต์ () ใช้ contentType = application / json


309

ฉันสังเกตเห็นว่าเมื่อใช้ $ .post () ใน jquery ว่า contentType เริ่มต้นคือ application / x-www-form-urlencoded - เมื่อรหัส asp.net mvc ของฉันต้องมี contentType = application / json

(ดูคำถามนี้ว่าทำไมฉันต้องใช้ application / json: ASPNET MVC - ทำไม ModelState.IsValid false "ต้องมีฟิลด์ x" เมื่อฟิลด์นั้นมีค่า? )

ฉันจะสร้าง $ .post () ส่ง contentType = application / json ได้อย่างไร ฉันมีฟังก์ชัน $ .post () จำนวนมากอยู่แล้วดังนั้นฉันไม่ต้องการเปลี่ยนเป็น $ .ajax () เพราะใช้เวลานานเกินไป

ถ้าฉันลอง

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

มันยังมี contentType = application / x-www-form-urlencoded ดังนั้นพารามิเตอร์ "json" จะทำอะไรได้บ้างหากไม่เปลี่ยนเนื้อหาเป็น json

ถ้าฉันลอง

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

ใช้งานได้ แต่มีผลกับทุก $ .get และ $. โพสต์ที่ฉันมีและทำให้บางอย่างแตก

มีวิธีใดบ้างที่ฉันสามารถเปลี่ยนพฤติกรรมของ $. post () เพื่อส่ง contentType = application / json?

คำตอบ:


71

ฉันคิดว่าคุณอาจจะต้อง

1. แก้ไขแหล่งที่มาเพื่อให้ $. โพสต์ใช้ประเภทข้อมูล JSON เสมอเนื่องจากเป็นเพียงช็อตคัตสำหรับการ$.ajaxโทรที่กำหนดค่าไว้ล่วงหน้า

หรือ

2. กำหนดฟังก์ชั่นยูทิลิตี้ของคุณเองซึ่งเป็นทางลัดสำหรับการ$.ajaxตั้งค่าที่คุณต้องการใช้

หรือ

3. คุณสามารถเขียนทับ$.post functionด้วยการใช้งานของคุณเองผ่านการปะแก้ลิง

ประเภทข้อมูล JSON ในตัวอย่างของคุณอ้างถึงประเภทข้อมูลที่ส่งคืนจากเซิร์ฟเวอร์ไม่ใช่รูปแบบที่ส่งไปยังเซิร์ฟเวอร์


5
+1 ผมจะไปสำหรับการกำหนดวิธีการใหม่หรือเขียนทับjQuery.postวิธีการมันเป็นฟังก์ชั่นง่ายจริงๆ ...
CMS

3
ไม่ใช่ความคิดที่ไม่ดีเพียงแค่สร้างวิธีการที่เรียกว่า $ .mvcpost () ที่เหมือนกับ $. post (โดยการคัดลอกรหัสที่เชื่อมโยง) และเปลี่ยน contenttype จากนั้นสำหรับ $ .post () ทั้งหมดที่ต้องเปลี่ยนฉันต้องพิมพ์อักขระพิเศษ 3 ตัวไว้ข้างหน้า มันเร็วกว่าการเขียนใหม่เป็น $ .ajax ()
JK

9
@ParifRepin ฉันต้องเรียก JSON.stringify () ในส่วนของข้อมูล
Ustaman Sangat

2
@dragon - นี่คือคำตอบ 3 ข้อสำหรับ "มีวิธีที่ฉันสามารถเปลี่ยนพฤติกรรมของ $ .post () เพื่อส่ง contentType = application / json?" ส่วนใดที่ไม่ใช่คำตอบ
Russ Cam

2
สิ่งสำคัญที่ควรทราบคือ: $ .ajax และเป็นวิธีการที่หลากหลายที่จะพยายามเดาว่า contentType ควรเป็นอย่างไร (ยกเว้นกรณีที่ระบุไว้) ตามข้อมูลที่คุณให้ "mystring data"จะเป็นapplication/x-www-form-urlencoded;ที่เป็นวัตถุจะ{ anyKey: "anyvalue and type" } application/jsonเซิร์ฟเวอร์จำนวนมากที่อ่าน json จะอนุญาตเฉพาะวัตถุหรืออาร์เรย์ไม่ใช่สตริง - ดังนั้นทำไม jquery ทำนายสิ่งต่าง ๆ ด้วยวิธีนี้ หากคุณมีเซิร์ฟเวอร์ที่อ่านสตริงตัวเลข ฯลฯ โดยไม่ถูกห่อในวัตถุคุณต้องระบุประเภทเนื้อหาเช่นเดียวกับในคำตอบนี้
bzuillsmith

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

ดู: jQuery.ajax ()


13
โพสต์ต้นฉบับถามว่า: "มีวิธีใดบ้างที่ฉันสามารถเปลี่ยนพฤติกรรมของ $. post () เพื่อส่ง contentType = application / json?" แต่มันยังระบุว่า "ใช้งานได้ แต่ส่งผลกระทบต่อทุก $ .get และ $. โพสต์ที่ฉันมีและทำให้บางรายการพัง" ฉันเข้าใจคำถามว่า "ฉันจะทำสิ่งเดียวกันให้สำเร็จโดยใช้ $. โพสต์ได้อย่างไร แต่ส่ง contentType ที่ถูกต้องโดยไม่ทำลาย $ .get และ $ .post" มันไม่ถูกต้องเหรอ?
Adrien

5
@ x1a4 ไม่เข้าใจอย่างชัดเจนว่า. jax คือการโทรไม่ใช่ ajaxSetup
Walker

39
@Adrien สำหรับสิ่งที่มีค่าสองปีต่อมาคำตอบของคุณคือคำตอบที่ฉันกำลังมองหาเมื่อฉัน googled นี้
AwesomeTown

74
จำเป็นต้องใช้JSON.stringify(data)เนื่องจากเซิร์ฟเวอร์คาดว่าจะมีสตริง JSON และ jQuery เพียงแค่เชื่อมโยงคู่คีย์ - ค่าโดยใช้เครื่องหมายแอมเปอร์แซนด์, แบบฟอร์ม urlencoded
dragon

3
แม้สี่ปีต่อมาคำตอบนี้ได้แก้ไขชั่วโมงการค้นหาของฉันด้วยรหัสน้อยกว่าสิบบรรทัด
Pieter VDE

86

ในที่สุดฉันก็พบวิธีแก้ปัญหาที่เหมาะกับฉัน:

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

8
ไม่สามารถหาสาเหตุที่ฉันได้รับข้อผิดพลาดได้ แต่กลับกลายเป็นว่าคุณต้องทำให้ข้อมูลเป็นแบบสตริง
FriendlyGuy

5
ฉันรู้ว่ามันใช้งานได้ แต่ทำไมคุณต้องทำสิ่งใดให้เป็นมาตรฐาน? มันเป็นข้อผิดพลาด jQuery หรือไม่? ดูเหมือนว่าจะมีความสุขอย่างสมบูรณ์แบบในการจัดลำดับdataอาร์กิวเมนต์ของคุณเป็นx-www-form-urlencodedแต่ถ้าคุณระบุว่าประเภทเนื้อหาของคำขอเป็น JSON ก็ยังคงยืนยันในการส่งdataในรูปแบบที่ไม่ตรงกัน
Pavel Repin

ดี. ฉันไม่ขุดมันมาก ฉันมีความสุขที่ได้ทำงาน ;) เซิร์ฟเวอร์ของฉันต้องใช้ JSON
vvkatwss vvkatwss

กันที่นี่ ถ้าไม่มี JSON.stringify มันไม่ทำงานฉันสงสัยว่าทำไม
John Simoes

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!')
});

สิ่งนี้ทำโดยเพียงแค่คัดลอกรหัสของ "รับ" และ "โพสต์" จากแหล่ง JQuery ดั้งเดิมและทำการเข้ารหัสพารามิเตอร์บางอย่างเพื่อบังคับให้ JSON POST

ขอบคุณ!


2
ตามปกติ - คำตอบที่ดีที่สุดมาถึงปาร์ตี้และมี upvotes น้อย (
nikib3ro

คำตอบที่ดี - ใช้เวลาสักครู่เพื่อตระหนักว่า $. โพสต์ไม่ได้ทำสิ่งนี้ "ออกจากกล่อง"
markp3rry

21

ใช้เพียง

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

UPDATED @JK: หากคุณเขียนคำถามของคุณเพียงหนึ่งตัวอย่างรหัสมี $. โพสต์คุณจะพบตัวอย่างที่เกี่ยวข้องในคำตอบ ฉันไม่ต้องการทำซ้ำข้อมูลเดียวกันกับที่คุณได้ศึกษามาจนทราบแล้ว: $ .post และ $ .get เป็นแบบย่อของ $ .ajax ดังนั้นเพียงแค่ใช้ $ .ajax และคุณสามารถใช้ชุดพารามิเตอร์แบบเต็มโดยไม่ต้องเปลี่ยนการตั้งค่าร่วมใด ๆ

โดยวิธีที่ฉันจะไม่แนะนำให้เขียนทับ $ .post มาตรฐาน มันเป็นความเห็นส่วนตัวของฉันแต่สำหรับฉันมันสำคัญไม่เพียง แต่โปรแกรมจะทำงานเท่านั้น แต่ยังรวมถึงทุกคนที่อ่านโปรแกรมของคุณด้วยวิธีเดียวกัน เขียนทับวิธีมาตรฐานโดยไม่ต้องมีเหตุผลที่สำคัญมากสามารถปฏิบัติตามเพื่อความเข้าใจผิดในการอ่านรหัสโปรแกรม ดังนั้นผมจึงทำซ้ำคำแนะนำของฉันอีกครั้งหนึ่ง: เพียงแค่ใช้ $ เดิม .ajax รูปแบบ jQuery แทนjQuery.getและjQuery.postและคุณได้รับการทำงานของโปรแกรมซึ่งไม่เพียง แต่สมบูรณ์ แต่สามารถอ่านได้โดยคนที่ไม่มีความเข้าใจผิดใด ๆ


1
คำอธิบายและแนวทางที่ยอดเยี่ยม
Ved Prakash

8

ประเภทข้อมูล "json" ที่คุณสามารถผ่านเป็นพารามิเตอร์สุดท้ายในการโพสต์ () ระบุประเภทของข้อมูลที่ฟังก์ชันคาดหวังในการตอบสนองของเซิร์ฟเวอร์ไม่ใช่ประเภทที่ส่งในคำขอ โดยเฉพาะจะตั้งค่าส่วนหัว "ยอมรับ"

สุจริตทางออกที่ดีที่สุดของคุณคือการสลับไปยัง ajax () โทร ฟังก์ชัน post () มีความหมายว่าสะดวก การเรียกใช้ ajax () เวอร์ชันที่ง่ายขึ้นเมื่อคุณเพิ่งโพสต์แบบง่าย ๆ คุณไม่ได้

หากคุณไม่ต้องการเปลี่ยนคุณสามารถสร้างฟังก์ชั่นของคุณเองชื่อ, พูด, xpost () และให้มันเปลี่ยนพารามิเตอร์ที่กำหนดเป็นพารามิเตอร์สำหรับการโทร jQuery ajax () ด้วยชุดประเภทเนื้อหา ด้วยวิธีนี้แทนที่จะต้องเขียนฟังก์ชั่นใหม่ของโพสต์ () เหล่านั้นทั้งหมดลงใน ajax () ฟังก์ชั่นคุณเพียงแค่เปลี่ยนจากโพสต์เป็น xpost (หรืออะไรก็ตาม)


เป็นเพียงวิธี $. post () ที่เรียกใช้เมธอดคอนโทรลเลอร์ asp.net mvc ที่จำเป็นต้องเปลี่ยน ควรทำการเปลี่ยนแปลง jquery บริสุทธิ์ (การเติมข้อความอัตโนมัติ, diaplog, jqgrid และอื่น ๆ ) ฉันหวังว่าจะมีการเปลี่ยนแปลงง่าย ๆ ที่ฉันสามารถทำได้เพื่อ $. โพสต์ที่เกี่ยวข้อง แต่ดูเหมือนว่าฉันต้องแปลงเป็น $ .ajax () มันเป็นแอพที่มีขนาดใหญ่และมีอาแจ็กซ์หนักมากดังนั้นจึงมีการเปลี่ยนแปลงมากมาย
JK

6

การขยาย jQuery API อย่างง่ายนี้ (จาก: https://benjamin-schweizer.de/jquerypostjson.html ) สำหรับ $ .postJSON () ทำเคล็ดลับ คุณสามารถใช้ postJSON () เหมือนกับการเรียก Ajax jQuery เนทีฟอื่น ๆ คุณสามารถแนบตัวจัดการเหตุการณ์และอื่น ๆ

$.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
  });
};

เช่นเดียวกับ Ajax API อื่น ๆ (เช่น $ http จาก AngularJS) มันตั้ง contentType ที่ถูกต้องเป็น application / json คุณสามารถส่งผ่านข้อมูล json ของคุณ (วัตถุจาวาสคริปต์) ได้โดยตรงเนื่องจากจะได้รับการทำให้เป็นสตริงที่นี่ DataType ที่ส่งคืนที่คาดไว้ถูกตั้งค่าเป็น JSON คุณสามารถแนบตัวจัดการเหตุการณ์เริ่มต้นของ jquery สำหรับสัญญาเช่น:

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

5

ฉันรู้ว่านี่เป็นคำตอบที่ล่าช้าฉันจริง ๆ แล้วมีวิธีลัดที่ฉันใช้สำหรับการโพสต์ / อ่านไปยัง / จากบริการบน MS .. มันทำงานได้กับ MVC เช่นเดียวกับ ASMX ฯลฯ ...

ใช้:

$.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 ที่แก้ไขจากไฟล์ JS ของ json.org ซึ่งเพิ่มการจัดการสำหรับ MS "/Date(...)/" วันที่ ...

ไฟล์ json2.js ที่ถูกแก้ไขไม่รวมอยู่ในนั้นจะใช้ตัวแยกวิเคราะห์สคริปต์ตามในกรณีของ IE8 เนื่องจากมีอินสแตนซ์ที่ตัวแยกวิเคราะห์ดั้งเดิมหยุดพักเมื่อคุณขยายต้นแบบของอาร์เรย์และ / หรือวัตถุเป็นต้น

ฉันได้พิจารณาปรับปรุงรหัสนี้เพื่อใช้อินเทอร์เฟซที่สัญญา แต่มันทำงานได้ดีสำหรับฉัน


4

หัวใจสำคัญของเรื่องคือข้อเท็จจริงที่ว่า JQuery ณ เวลาที่เขียนไม่มีวิธีการโพสต์ JSON ขณะที่ getJSON มีอยู่และทำสิ่งที่ถูกต้อง

เมธอด postJSON จะทำสิ่งต่อไปนี้:

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

ฉันมีปัญหาที่คล้ายกันกับรหัส JavaScript ต่อไปนี้:

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

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

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

ในFiddlerฉันเห็นคำขอด้วย:

  • หัวข้อ: 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

อะแดปเตอร์ / wrapper ของคุณเป็นอย่างไร

//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... }
});

พยายาม แต่ยังไม่ได้รับผลลัพธ์ที่คาดหวัง ฉันมี Spring Boot Rest API
Suraj Shingade

0

ด้วยเหตุผลบางอย่างการตั้งค่าประเภทเนื้อหาในคำขอ ajax ตามที่ @Adrien แนะนำไม่ทำงานในกรณีของฉัน อย่างไรก็ตามคุณสามารถเปลี่ยนประเภทเนื้อหาโดยใช้ $ .post โดยทำสิ่งนี้ก่อน:

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

จากนั้น$.postโทรออก:

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

ฉันมีปัญหากับ jQuery + IIS และนี่เป็นทางออกเดียวที่ช่วยให้ jQuery เข้าใจในการใช้การเข้ารหัส windows-1252 สำหรับคำขอ ajax


0

เราสามารถเปลี่ยนประเภทเนื้อหาเช่นนี้ได้ใน $ .post

$. โพสต์ (url, ข้อมูล, ฟังก์ชั่น (ข้อมูล, สถานะ, xhr) {xhr.setRequestHeader ("ประเภทเนื้อหา", "แอปพลิเคชัน / x-www-form-urlencoded; charset = utf-8");});


-1

$. โพสต์ไม่ทำงานหากคุณมีปัญหา CORS (การแบ่งปันทรัพยากรต้นกำเนิด) ลองใช้ $. Ajax ในรูปแบบต่อไปนี้: "$ .ajax ({url: someurl, contentType: 'application / json', data: requestInJSONFormat, ส่วนหัว: {'Access-Control-Allow-Origin': '*'}, dataType: 'json', ประเภท: 'POST', async: false, success: function (Data) {... }}); "


-19

คุณไม่สามารถส่ง application/jsonโดยตรง - ต้องเป็นพารามิเตอร์ของคำขอ GET / POST

ดังนั้นสิ่งที่ชอบ

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

คำตอบนี้อาจไม่ถูกต้อง แต่ก็ไม่ได้คุณภาพต่ำและเป็นความพยายามที่จะตอบคำถาม จากการตรวจสอบ
Wai Ha Lee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.