2009-09-11 2 views
17

아약스 일을하기 위해 $ .ajax()를 사용할 수는 있지만 큰 폼의 값을 게시하기에는 적합하지 않다고 생각합니다.jQuery를 사용하여 많은 필드가있는 양식을 게시하는 방법은 무엇입니까?

post 큰 폼 (많은 필드)을 모두 손으로 입력하지 않으려면 어떻게해야합니까?

+3

OP는 많은 필드가있는 양식을 게시하는 것을 의미한다고 생각합니다. 필자가 필드를 하나씩 게시 할 때 작성해야 할 상용구 코드가 많이 있으며, 양식에 모든 필드를 게시하는 방법이 있는지 여부를 묻는 OP가 있다고 생각합니다. 이 질문은 나를 위해 매우 유용했습니다. –

답변

42

그 가정에 대한 추론은 무엇입니까? POST는 GET보다 많은 양의 데이터를 전송하도록 설계되었습니다. AJAX POST 요청은 "정상적인"POST 요청과 거의 동일합니다.이 요청은 번들로 제공되어 약간 다른 방식으로 브라우저에서 내부적으로 처리됩니다. 두 개의 헤더가 약간 다를 수 있지만 데이터는 모두 동일합니다. 왜 AJAX는 "큰"형식을 처리하지 못합니까?

어쨌든 "대형"양식으로 정의 할 수도있는 것이 무엇입니까?

편집 : 질문 해 주셔서 감사합니다. 네가 지금 묻고있는 것을 이해하고 네가 어디에서 왔는지 알 겠어. 입력이 많은 양식의 경우 항상 Ajax 요청으로 묶는 것이 어려울 수 있습니다.

jQuery를 사용하고 있으므로이 문제를 쉽게 해결할 수 있습니다. serialize() 방법을 확인하십시오. 폼에 입력하면 Ajax 요청에 직접 전달할 수있는 모든 양식 입력 요소 및 값에 대한 쿼리 문자열이 반환됩니다. 매뉴얼 페이지에는 어떻게 끝나는 지 보여주는 예제가있다.

당신이해야 할 모든

은 이것이다 :

"form"이 양식의 ID입니다
$.ajax({ 
    data: $("form").serialize(), 
    //etc. 
}); 

.

+8

나는 POST가 더 많은 양의 데이터를 전송하고 GET하지 않는다고 동의한다. POST는 새로운 정보로 서버의 상태를 변경하기위한 것입니다. GET은 서버에서 자원을 검색하기위한 것입니다. –

+0

serialize()는 어떻게 수행됩니까? 성능 향상을 위해 노력하고 있습니다. – omg

+2

@ 존 : 네, 이것이 각각의 주된 의도입니다. 그러나 POST 요청의 크기에는 실제 제한이 없지만 GET 요청에는 한계를 초과하면 문제를 일으키는 것으로 알려져 있습니다. 나는 "구체적으로"라는 문구를 사용하는 것이 POST의 유일한 목적이라고 암시 하듯이 약간 잘못된 것이라고 생각합니다. 물론 의도 한 해석이 아닙니다. – zombat

1

아직 그것을 시도하지 않은 경우. 그런 다음 BIG 양식을 작성한 다음 (현재 의미하는대로) $.ajax() 또는 jQuery Forms 플러그인을 사용하여 게시하십시오. 이런 종류의 사안인지 아닌지 알 수 있습니다!

편집 : - (편집 후) forms plugin은 당신을위한 것입니다! 한번 해봐.

+0

게시물 내용을 어떻게 결정하는지 알고 있습니까? (양식을 제출할 때와 같은 기본 메커니즘) 또는 하나씩 확인하십시오. – omg

+0

@Shore 당신은 ** 수동으로 데이터를 설정해야한다고 말했습니다 ** 이것은 자동으로 양식의 모든 필드를 제출합니다. 필드의 서브 세트를 조회 문자열로 직렬화 할 수 있습니다. http : //malsup.com/jquery/form/ – TheVillageIdiot

6

jQuery.ajax(options)은 더 간단하므로 jQuery.post(url, data, callback, type)을 사용할 수 있습니다.

serialize을 사용하면 전체 양식을 자동으로 보낼 수 있습니다.

$.post("/post_handler/", 
    $("form#my_form").serialize(), 
    function(json){ 
     /*your success code*/ 
    }, "json"); 

더 완벽한 예 :

<script> 
$().ready(function(){ 
    $("form#my_form submit").click(function(){ 
     $.post("/post_handler/", 
      $("form#my_form").serialize(), 
      function(json){ 
       /*your success code*/ 
      }, "json"); 
     return false; 
    }); 
} 
</script> 
<form id="my_form" action="/post_handler/" method="post"> 
    <input type="text" name="text1" value="my text 1" /> 
    <input type="text" name="text2" value="my text 2" /> 
    <input type="submit" name="submit_button" value="Send" /> 
</form> 

이 기본 post을 무시하고, AJAX와 그것을 수행 할 것입니다.

+0

serialize() 자체는 어떻게 처리 되는가? 원칙적으로 어떻게 처리 되는가? – omg

+0

'$ ("form # my_form"). serialize()'는

내용을 쿼리 문자열 형식으로 전송할 준비가되었습니다 ('multiple = Multiple2 & check = check2 & radio = radio1'). – voyager

+0

당신은 내가 어떻게 묻는 동안 무엇에 대해 이야기합니다. – omg

1

jquery form plugin을 사용해보십시오.

아마 당신이 상자에서해야 할 일을 정확하게 수행합니다.

10

각 요소를 수동으로 처리하지 않으려면 serialize을 사용하는 것이 좋습니다.

$.ajax({ 
    type: "POST", 
    url: "form.php", 
    data: $("#form_id").serialize() 
    success: function(msg) { 
    alert("Form Submitted: " + msg); 
    } 
}); 
1

$ .ajax()와 다소 복잡한 (큰) 양식을 보냈으며 문제가 없습니다. 아약스 요청을 통해 파일을 보냈지 만 완료된 것을 보았습니다. 업로드하는 동안 브라우저를 묶지 않아 기존 게시물이 더 잘 작동합니다.

@zombat에 대한 귀하의 의견을 토대로 생각해 보면, 여러분은 매우 많은 수의 입력을 가지고 있다고 생각합니다. 그 중 대부분은 대부분 공백이 될 것입니다. 두 가지 제안은 여기 1) 입력을 별도의 양식으로 나누고 터치/완료되는 즉시 각 양식을 보냅니다. 2) JavaScript로 폼의 상태를 검사하고 정보를 JSON 또는 XML로 래핑하고 폼 데이터를 게시하는 대신 데이터 구조 만 게시하십시오.

"Large"는 문제가 아니어야합니다. 전송하기 어려운 이유를 모든 사람이 알 수 있도록 데이터를 설명하는 더 나은 형용사를 찾을 수 있습니다.

관련 문제