$.ajax(jQuery 또는 Zepto)를 사용하여 일련의 객체를 POST하려면 어떻게 해야 합니까?
Zepto나 Jquery에 $.ajax가 들어간 오브젝트를 포스팅하고 싶습니다.둘 다 같은 이상한 오류가 발생하지만, 내가 무엇을 잘못하고 있는지 찾을 수 없습니다.
RestEasy와 같은 테스트 클라이언트를 사용하여 데이터를 전송하면 서버에 저장되고, 브라우저의 넷패널에서 요청이 엉망이 되는 것을 볼 수 있기 때문에 JS가 원인이라고 생각합니다.
POST의 데이터 속성으로서 오브젝트 배열을 송신하면, 올바르게 송신되지 않습니다.
데이터 객체:
var postData = [
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
요청:
$.ajax({
url: _saveDeviceUrl
, type: 'POST'
, contentType: 'application/json'
, dataType: 'json'
, data: postData
, success: _madeSave.bind(this)
//, processData: false //Doesn't help
});
브라우저에 표시된 요청 본문:
"bob=undefined&jonas=undefined"
이는 jQuery와 Zepto가 POST 데이터 작성에 사용하는 $.param 방식을 사용하면 보다 직접적으로 확인할 수 있습니다.
$.param(
[
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
)
// Output: "bob=undefined&jonas=undefined"
복잡한 포스트 데이터에 대한 이러한 라이브러리의 준비는 내가 예상했던 것과는 다른 것 같습니다.
이 답변은 있습니다만, 많은 콘텐츠를 POST 하고 있기 때문에 쿼리 파라미터로 데이터를 송신하고 싶지 않습니다.jQuery를 사용하여 어레이를 .ajax 포스트로 전송하려면 어떻게 해야 합니까?
jQuery/Zepto를 사용하여 POST를 통해 여러 개체를 전송하는 올바른 방법은 무엇입니까?
$.ajax({... 데이터: JSON.stringify(postData) 사용...})에서 제어되지 않은 콘텐츠를 전송하지만 서버가 형식을 좋아하지 않습니다.
업데이트: JSON.stringify가 올바른 형식의 콘텐츠를 전송하는 것 같습니다.문제는 서버 측이 원하는 개체의 구조에 대해 매우 구체적이라는 것입니다.개체에서 속성을 추가하거나 제거하면 일치하는 속성을 사용하는 대신 전체 프로세스가 실패합니다.이것은 서버에서 송신된 콘텐츠를 뷰 모델로 사용하는 것은 좋지만 뷰 모델이 변경되기 때문에 불편합니다.여전히 최선의 해결책을 찾고 있습니다.
반드시 해라stringify
전송하기 전에.도서관에 너무 의존해서 내용을 보면 제대로 인코딩이 될 것 같아서타입은 투고하고 있었지만, 투고하고 있지 않은 것 같습니다.
동작:
$.ajax({
url: _saveAllDevicesUrl
, type: 'POST'
, contentType: 'application/json'
, data: JSON.stringify(postData) //stringify is important
, success: _madeSave.bind(this)
});
$.toJSON과 같은 플러그인을 사용하는 것보다 이 방법을 선호합니다.
다음을 시도해 보십시오.
$.ajax({
url: _saveDeviceUrl
, type: 'POST'
, contentType: 'application/json'
, dataType: 'json'
, data: {'myArray': postData}
, success: _madeSave.bind(this)
//, processData: false //Doesn't help
});
edit: 대부분의 브라우저에서 지원되는 네이티브 JSON.stringify() 메서드를 사용하는 것이 안전해졌습니다(궁금하다면 IE8+도 마찬가지).
다음과 같이 심플합니다.
JSON.stringify(yourData)
데이터를 전송하기 전에 JSON으로 인코딩해야 합니다.이러한 오브젝트를 POST 데이터로서 송신할 수는 없습니다.
이를 위해 jQuery json 플러그인을 사용할 것을 권장합니다.그런 다음 jQuery에서 다음과 같은 것을 사용할 수 있습니다.
$.post(_saveDeviceUrl, {
data : $.toJSON(postData)
}, function(response){
//Process your response here
}
);
다른 유형의 배열을 게시하는 이 예를 확인하십시오.
function PostArray() {
var myObj = [
{ 'fstName': 'name 1', 'lastName': 'last name 1', 'age': 32 }
, { 'fstName': 'name 2', 'lastName': 'last name 1', 'age': 33 }
];
var postData = JSON.stringify({ lst: myObj });
console.log(postData);
$.ajax({
type: "POST",
url: urlWebMethods + "/getNames",
data: postData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response.d);
},
failure: function (msg) {
alert(msg.d);
}
});
}
C#에서 WebMethod를 사용하면 다음과 같이 데이터를 가져올 수 있습니다.
[WebMethod]
public static string getNames(IEnumerable<object> lst)
{
string names = "";
try
{
foreach (object item in lst)
{
Type myType = item.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
if(prop.Name == "Values")
{
Dictionary<string, object> dic = item as Dictionary<string, object>;
names += dic["fstName"];
}
}
}
}
catch (Exception ex)
{
names = "-1";
}
return names;
}
POST에서 $.ajax를 가진 오브젝트 배열에서 C# WebMethod에 대한 예
아약스에서 보낸 django의 오브젝트 배열을 받을 때도 같은 문제가 있었습니다.JSONStringyfy가 날 위해 일했어.이것 좀 보세요.
먼저 데이터를 문자열로 분류합니다.
var myData = [];
allData.forEach((x, index) => {
// console.log(index);
myData.push(JSON.stringify({
"product_id" : x.product_id,
"product" : x.product,
"url" : x.url,
"image_url" : x.image_url,
"price" : x.price,
"source": x.source
}))
})
그래서 이렇게 보냈는데
$.ajax({
url: '{% url "url_name" %}',
method: "POST",
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'queryset[]': myData
},
success: (res) => {
// success post work here.
}
})
수신처:
list_of_json = request.POST.getlist("queryset[]", [])
list_of_json = [ json.loads(item) for item in list_of_json ]
언급URL : https://stackoverflow.com/questions/11109795/how-do-i-post-an-array-of-objects-with-ajax-jquery-or-zepto
'programing' 카테고리의 다른 글
unix - 파일의 head 및 tail (0) | 2023.04.11 |
---|---|
Apache POI에서 열 너비 설정 (0) | 2023.04.11 |
mongoDB 구별 및 같은 쿼리의 어디에 있습니까? (0) | 2023.04.06 |
TypeScript 사용자 지정 오류 클래스 (0) | 2023.04.06 |
iOS 8/Safari 8은 ASP에서 작동하지 않습니다.NET AJAX 확장 (0) | 2023.04.06 |