[javascript] $ .ajax를 사용하여 쿼리 문자열 대신 JSON을 보내는 방법은 무엇입니까?

누군가 jQuery가 쿼리 문자열 대신 실제 JSON을 보내도록 만드는 방법을 쉽게 설명 할 수 있습니까?

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

실제로 신중하게 준비된 JSON을 쿼리 문자열로 변환합니다. 성가신 것 중 하나는 쿼리 찌르기의 한계로 인해 array: []객체의 모든 객체가로 변환된다는 array[]: []것입니다.



답변

당신은 사용할 필요가 JSON.stringify를 지정 먼저 직렬화 JSON에 개체에, 그리고 contentType서버가 그것의 JSON을 이해 있도록. 트릭을 수행해야합니다.

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

JSON객체는 JavaScript 1.7 / ECMAScript 5 이상을 지원하는 브라우저에서 기본적으로 사용 가능합니다. 레거시 지원이 필요한 경우 json2 를 사용할 수 있습니다 .


답변

아니요, dataType옵션 은 수신 된 데이터를 구문 분석하는 것입니다.

JSON을 게시하려면 직접 문자열을 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에는가 있지만 .parseJSONstringifier는 포함되어 있지 않습니다. 다른 polyfill 라이브러리가 필요합니다.


답변

ASP.NET MVC와 같은 많은 아키텍처에는 contentType으로 JSON.stringify를 처리하는 기능이 내장되어 있지만 내 상황이 약간 다르므로 나중에 누군가를 도울 수 있습니다. 시간이 절약되었을 것입니다!

내 http 요청이 다른 하위 도메인에있는 IBM (AS400 환경)의 CGI API에 의해 처리되므로이 요청은 교차 출처이므로 jsonp입니다. 실제로 자바 스크립트 객체를 통해 아약스를 보냅니다. 다음은 내 아약스 POST의 예입니다.

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


답변

이것을 asp.net으로 다시 보내고 request.form []의 데이터가 필요한 경우, 컨텐츠 유형을 “application / x-www-form-urlencoded; charset = utf-8″로 설정해야합니다.

원래 게시물은 여기

두 번째로 Datatype을 제거하십시오. 리턴을 기대하지 않으면 POST는 약 4 분 동안 기다렸다가 실패합니다. 여기를 참조 하십시오


답변