programing

$.ajax(jQuery 또는 Zepto)를 사용하여 일련의 객체를 POST하려면 어떻게 해야 합니까?

batch 2023. 4. 6. 21:22
반응형

$.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

반응형