누군가 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에는가 있지만 .parseJSON
stringifier는 포함되어 있지 않습니다. 다른 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
});