2013-10-22 1 views
0

jQuery.post 함수를 사용하여 배열을 게시 할 수없는 것 같습니다. 500 내부 서버 오류 코드가 발생합니다.

실제의 jQuery 게시물 :

function ChangeAllStatuses(statusId) {  
var ids = []; 
var i = 0; 
var hiddenIds = $('[name|="serialIds"]'); 
hiddenIds.each(function() { 
    ids[i++] = $(this).val(); 
}); 
$.post(
    ChangeAllStatusesURL, 
    { 
     serialIds: ids, //this is the array 
     statusId: statusId 
    }, 
    function (data) { 
     if (data.indexOf('Error') == 0) 
      $('#message').html(data); 
     else 
      location.reload(); 
    }) 

}

이는 POST 데이터 기대 컨트롤러 액션이다

[HttpPost] 
    public ActionResult ChangeAllStatuses(int[] serialIds, int statusId) 
    { 
     string result = service.ChangeAllStatuses(serialIds, statusId); 
     return Content(result); 
    } 
+0

500 서버 오류 서버 "이외의 아무것도 의미하지 않는다 오류". 서버에서이를 디버깅해야합니다. – Archer

+0

@Archer, serialIds가 서버 null에 도달했으며 이유를 알 수 없습니다. ids 변수가 null이 아니므로이 변수를 사용하여 post 매개 변수를 설정하면 ids가 2 개의 int 값을 포함하는 배열입니다. –

+0

개발자 도구를 사용하여 게시물을 디버깅 할 때 POST에 serialIds 매개 변수가 표시됩니다 (클라이언트가 서버에 값을 보내는 중임). –

답변

0

MVC는 직렬화의 특정 방법을 요구를 데이터.

$ajaxtraditional 플래그와 함께 사용하십시오.

이렇게하면 데이터가 다르게 serialize됩니다. 이 (예를 들어 jQuery.param 문서에서) 복잡한 배열에 잘 대처하지 않습니다 : 그것은 아마 권리를 포맷 아니에요

// <=1.3.2: (= traditional) 
$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4" 
// >=1.4: 
$.param({ a: [ 2, 3, 4 ] }); // "a[]=2&a[]=3&a[]=4" 

// <=1.3.2: (= traditional) 
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] }); 
// "a=[object+Object]&d=3&d=4&d=[object+Object]" 

// >=1.4: 
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] }); 
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5" 
0

. 대신 .post의() 아약스()를 사용

$.ajax({ 
    url: '~/myUrl/', 
     data: { 
      serialIds: ids, 
      statusId: statusId 
     }, 
     type: "POST" 
    }); 
0

단순히 자바 스크립트 객체와 같은 배열을 초기화하고 괜찮 았는데 :

var ids = {}; 
관련 문제