2011-08-12 3 views
1

X 양을 선택한 상태에서 양식을 제출할 때 코드가 중단되는 문제가 있습니다. 내 양식은 자동 생성되며 사용자 입력에 따라 다릅니다. 양식에서 선택되는 데이터의 양이 적을 때 데이터를 제출하는 데 문제가 없으며 CGI 스크립트가 정상적으로 실행됩니다. 배열 'params'가 124 개 항목보다 커지면 코드가 멈추고로드되지 않는 것 같습니다.jquery에서 cgi로 양식을 제출할 때의 문제

\$('#HTML_EXECUTE_BUTTON').click(function() { 

       \$("#prog").html("<h2>WORKING - <img src='./lib/jqueryui_start/development-bundle/themes/base/images/ui-anim_basic_16x16.gif'> </h2>"); 

       var params = \$("#mec_html_step_B_inputs").serializeArray(); 
       var params1 = \$("#mec_html_step_C_inputs").serializeArray(); 
       var params2 = \$("#mec_html_step_D_inputs").serializeArray(); 
       var params3 = \$("#mec_html_step_A_inputs").serializeArray(); 

       params = \$.merge(params, params1); 
       params = \$.merge(params, params2); 
       params = \$.merge(params, params3); 

       params.push({ name: 'menu_mode', value: '5' }); 
       params.push({ name: 'mode', value : '$mode'}); 
       params.push({ name: 'modetype', value: '$GLOBAL_MQA_MODE' }); 

       \$("#HTML_EXECUTE_BUTTON").css("background-color",""); 

        my_window = window.open("", "DEBUG WINDOW", "status=1,width=350,height=150"); //for debugging 
        my_window.document.write(dump(params)); //for debugging 
        alert(params.length); // for debugging 


       \$.get("./cgi_scripts/$GLOB_SCRIPT_NAME",params , function(data) { 
        \$("#grapharea").html(data); 
        \$("#prog").html(" "); 
       }); 
      }); 

$ .get() 함수에 대한 문자/매개 변수 크기 제한이 있습니까? 내가 할 수있는 한 많은 디버깅을했는데 이것이 잘못 될 수 있다고 생각하는 마지막 영역입니다. CGI.pm에서 처리 할 수있는 최대 매개 변수가없는 한? 무엇이 잘못 될 수 있는지에 대한 생각? 내가 고려하지 않은 것?

감사 단지 아래, BTW 호출 CGI 스크립트의 형식은 같은 페이지에로드되는

.

+0

왜 달러 기호를 모두 벗어 납니까? – Tom

+0

문자열에 있습니다. 내 자바 스크립트는 생성 된 CGI입니다. – monkeyyy

답변

1

다른 웹 서버의 URL 길이는 다르지만 대개 2 ~ 6,000 자 정도입니다.

여기에있는 것이 있습니다. 서버로 전송되는 데이터가 어딘가에 저장되어 있다면, 아마도이 데이터를 POST 요청으로해야합니다. POST는 요청 데이터 본문에 양식 데이터가 포함되므로 대용량 데이터 집합을 훨씬 더 강력하게 처리합니다. 더 중요한 것은, GET 요청은 멱등하지 않아야한다는 것입니다. 동일한 요청을 반복해서 제출하면 항상 같은 결과가 나오고 다른 곳에서는 다른 것을 변경해서는 안됩니다. 이 요청이 이와 같지 않으면 POST 여야합니다.

LiveHTTPHeaders (Firefox 용) 또는 Fiddler와 같은 것을 사용하여 실제로 전송 된 요청을 검사 해 볼 수 있습니다. 그것을 보내야 할 것으로 예상되는 것과 비교하십시오.

EDIT : POST 사용 요청을 수정하려고합니다. jq 문서에서의 내 눈에 띄는 부분을 바탕으로, jq에 의존하여 자동으로 배열을 직렬화 할 수있는 것처럼 보입니다.

\$('#HTML_EXECUTE_BUTTON').click(function(event) { 

    \$("#prog").html('<h2>WORKING - <img src="./lib/jqueryui_start/development-bundle/themes/base/images/ui-anim_basic_16x16.gif" /> </h2>'); 

    var params = \$("#mec_html_step_B_inputs").serializeArray(); 
    var params1 = \$("#mec_html_step_C_inputs").serializeArray(); 
    var params2 = \$("#mec_html_step_D_inputs").serializeArray(); 
    var params3 = \$("#mec_html_step_A_inputs").serializeArray(); 

    params = \$.merge(params, params1); 
    params = \$.merge(params, params2); 
    params = \$.merge(params, params3); 

    params.push({ name: 'menu_mode', value: '5' }); 
    params.push({ name: 'mode', value : '\$mode'}); 
    params.push({ name: 'modetype', value: '\$GLOBAL_MQA_MODE' }); 

    \$("#HTML_EXECUTE_BUTTON").css("background-color",""); 

     my_window = window.open("", "DEBUG WINDOW", "status=1,width=350,height=150"); //for debugging 
     my_window.document.write(dump(params)); //for debugging 
     alert(params.length); // for debugging 

    jQuery.ajax({ 
     url: './cgi_scripts/$GLOB_SCRIPT_NAME', 
     type: 'POST', 
     data: params, 
     error: function(jXHR, sStatus, eError) { 
      // react to failures 
     }, 
     success: function(data, textStatus, jqXHR) { 
      // react to success 
      \$("#grapharea").html(data); 
      \$("#prog").html(" "); 
     } 
    }); 
    event.preventDefault(); 
    return false; 
}); 

는 (. 나는 또한 마크 업 없음 비기 적절한 인용 부호를 사용하도록 HTML 생성을 변경했습니다.)

편집 2 : 이제 이벤트가 캡처이 핸들러에 의해 소비를 클릭합니다.

+0

그것은 잠시 동안 작동 ... 그때 브라우저가 막 충돌하기 시작했다. – monkeyyy

+0

무엇을 의미합니까? 브라우저가 멈 췄거나 실제로 종료 되었습니까? – Tom

관련 문제