2017-01-26 3 views
0
에 기능을 .MAP 사용하는 경우 최대 호출 스택의 크기를 초과 나는 콘솔에이 오류를 받고 있어요

:catch되지 않은 오류 RangeError : jQuery를

$(document).on("change","select.task_activity", function(){ 

    selected_activity = $("select.task_activity :selected").map(function(){ return this.value }); 
    //selected_activity = $("select.task_activity").val(); 
    new_artifact_select = $("select.new_artifact"); 

    /* Loads artifacts select when one or more activities are selected */ 
    $.post("/tasks/activity_artifacts",{ 
    activity_id: selected_activity 
    },function(data, status){ 
    if (data){ 
     options = ""; 
     if (data.length > 0){ 
     for (i=0; i<data.length; i++){ 
      options += '<option value="'+data[i]['name']+'">'+data[i]['name']+'</option>'; 
     } 
     }else{ 
     options += '<option>This activity has no artifacts</option>'; 
     } 
    }else{ 
     options = '<option>Error</option>'; 
    } 
    new_artifact_select.html(options); 
    },"json"); 

}); 

오류 트리거 :

Uncaught RangeError: Maximum call stack size exceeded 

가 여기 내 jQuery를 조각이다 변경 이벤트가 포착 된 경우 여기

HTML의 조각 :

<select class="task_activity" name="task1"> 
    <option value="">Select</option> 
    <option value="35">.........</option> 
    (...) 
</select> 
<select class="task_activity" name="task2"> 
    <option value="">Select</option> 
    <option value="36">.........</option> 
    (...) 
</select> 

나는 배열에서 선택한 항목의 ID가 있어야합니다. 매핑은 on ("변경") 범위 밖에서 작동하지만 브라우저가 그 범위 내에서 더 많은 함수를 받아 들일 수없는 것처럼 보입니다.

몇 가지 대안이 있습니까?

+0

'$. post '에 참조 된 모든 변수를 확인하십시오. 하나 이상의 변수가 정의되지 않았을 가능성이 큽니다. –

+0

'.map()'이 무엇이라고 생각합니까? 나는 이것이 정말로 당신의 코드가 어떻게 생겼는지에 대해 심각하게 의심합니다. – Pointy

+0

게시 한 코드에'.map()'함수가 없습니다. – Barmar

답변

4

당신이 selected_activity를 사용하지만 그것은 jQuery를 객체가 아닌 배열

문제이므로주의하는 방법을 표시되지는 가능성이 $.post

의 데이터에 전달하려고하는 것입니다 실제 배열을 반환하려면 get()

var selected_activity = $("select.task_activity :selected").map(function(){ 
    return this.value 
}).get(); 
+0

jQuery는 POST 쿼리 문자열을 생성 할 때 이것을 처리하지 않을 것입니다. (나는 값으로 jQuery 객체를 가진 매개 변수를 전달하려하지 않았기 때문에 모르겠습니다.) – Pointy

+0

@Pointy 대답은 정확하다고 생각합니다. 나는 AJAX'data :'처리에서 jQuery 객체를 특별히 다루는 처리가 없다고 생각한다. – Barmar

+1

@Pointy no, 내부적으로 jQuery는'$ .param()'을 사용하여 객체를 인코딩하고 jQuery 객체에서 질식합니다. – charlietfl

관련 문제