Jquery AJAX를 사용하여 HTML 양식 제출


107

AJAX를 사용하여 HTML 양식을 제출하려고합니다. 이 예제를 .

내 HTML 코드 :

<form id="formoid" action="studentFormInsert.php" title="" method="post">
    <div>
        <label class="title">First Name</label>
        <input type="text" id="name" name="name" >
    </div>
    <div>
        <label class="title">Name</label>
        <input type="text" id="name2" name="name2" >
    </div>
    <div>
        <input type="submit" id="submitButton"  name="submitButton" value="Submit">
    </div>
</form>

내 스크립트 :

<script type="text/javascript">
    $(document).ready(function() { 
        $('#formoid').ajaxForm(function() { 
            alert("Thank you for your comment!"); 
        }); 
    });
</script>

이것은 작동하지 않으며 경고 메시지도받지 못하고 제출할 때 다른 페이지로 리디렉션하고 싶지 않고 경고 메시지 만 표시하고 싶습니다.

간단한 방법이 있습니까?

추신 : 몇 개의 필드가 있습니다. 두 가지를 예로 들어 보겠습니다.


"form"html 구성 요소를 제거 할 수 없습니까? 및 사용 JQuery와 올 버튼의 클릭 핸들러에 게시합니다
harshvchawla

답변:


177

AJAX에 대한 간략한 설명

AJAX는 단순히 비동기 JSON 또는 XML입니다 (대부분의 최신 상황에서 JSON). ASYNC 작업을 수행하고 있기 때문에 사용자에게보다 즐거운 UI 경험을 제공 할 것입니다. 이 특정 경우에는 AJAX를 사용하여 FORM 제출을 수행합니다.

정말 빨리 4 개 일반 웹 작업이있다 GET, POST, PUT, 그리고 DELETE; 이러한 직접 대응 SELECT/Retreiving DATA, INSERTING DATA, UPDATING/UPSERTING DATA,와 DELETING DATA. 기본 HTML / ASP.Net webform / PHP / Python 또는 기타 form작업은 POST 작업 인 "제출"입니다. 이 때문에 아래에서 모두 POST 수행에 대해 설명합니다. 그러나 때로는 http를 사용하면 다른 작업을 원할 수 있으며 .ajax.

귀하를위한 내 코드 (코드 주석에 설명) :

/* attach a submit handler to the form */
$("#formoid").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get the action attribute from the <form action=""> element */
  var $form = $(this),
    url = $form.attr('action');

  /* Send the data using post with element id name and name2*/
  var posting = $.post(url, {
    name: $('#name').val(),
    name2: $('#name2').val()
  });

  /* Alerts the results */
  posting.done(function(data) {
    $('#result').text('success');
  });
  posting.fail(function() {
    $('#result').text('failed');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="formoid" action="studentFormInsert.php" title="" method="post">
  <div>
    <label class="title">First Name</label>
    <input type="text" id="name" name="name">
  </div>
  <div>
    <label class="title">Last Name</label>
    <input type="text" id="name2" name="name2">
  </div>
  <div>
    <input type="submit" id="submitButton" name="submitButton" value="Submit">
  </div>
</form>

<div id="result"></div>


선적 서류 비치

jQuery 웹 사이트 $.post문서에서.

: Ajax 요청을 사용하여 양식 데이터 보내기

$.post("test.php", $("#testform").serialize());

: ajax를 사용하여 양식을 게시하고 결과를 div에 넣기

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <form action="/" id="searchForm">
            <input type="text" name="s" placeholder="Search..." />
            <input type="submit" value="Search" />
        </form>
        <!-- the result of the search will be rendered inside this div -->
        <div id="result"></div>
        <script>
            /* attach a submit handler to the form */
            $("#searchForm").submit(function(event) {

                /* stop form from submitting normally */
                event.preventDefault();

                /* get some values from elements on the page: */
                var $form = $(this),
                    term = $form.find('input[name="s"]').val(),
                    url = $form.attr('action');

                /* Send the data using post */
                var posting = $.post(url, {
                    s: term
                });

                /* Put the results in a div */
                posting.done(function(data) {
                    var content = $(data).find('#content');
                    $("#result").empty().append(content);
                });
            });
        </script>
    </body>
</html>

중요 사항

OAuth 또는 최소 HTTPS (TLS / SSL)를 사용하지 않고 보안 데이터 (신용 카드 번호, SSN, PCI, HIPAA 또는 로그인 관련 모든 것)에이 방법을 사용하지 마십시오.


@ abc123 인증 요청 헤더를 어떻게 설정할 수 있습니까? 나는 시도 beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },하지만 이것은 어떤 헤더를 설정하지 않습니다
마헨드라 kawde

@mahendrakawde $.ajax원하는 경우 예제를 작성할 수 있지만 실제로는 별도의 질문입니다
abc123

@ abc123 나는 그것을 위해 스레드를 시작했습니다. 당신과 공유하겠습니다.
mahendra kawde 2015 년

1
양식 게시를 전혀 사용하지 않고 버튼 (어떤 양식 div의 일부가 아닌 html 버튼) 클릭 핸들러에 jquery 게시를 수행 할 수 있습니다. 이런 식으로 event.preventdefault도 필요하지 않습니까?
harshvchawla

1
@harshvchawla는 물론 html 요소에서 가져온 변수에 대한 선택 쿼리가 다릅니다
abc123

26
var postData = "text";
      $.ajax({
            type: "post",
            url: "url",
            data: postData,
            contentType: "application/x-www-form-urlencoded",
            success: function(responseData, textStatus, jqXHR) {
                alert("data saved")
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        })

1
성공 / 완료 기능은 호출이 완료되고 서버에서 200 OK를 수신하면 발생합니다.
Varun S

안녕하세요 : $ (document) .ready (function () {$ ( '# formoid'). submit (function () {var postData = "text"; $ .ajax ({type : "post", url : " url ", 데이터 : postData, contentType :"studentFormInsert.php ", success : function (responseData, textStatus, jqXHR) {alert ("data saved ")}, 오류 : function (jqXHR, textStatus, errorThrown) {console.log ( errorThrown);}})}); 실제로 작동하지 않습니다 .. PHP 측에서 수정이 필요합니까?
Oliveira

4
좋은 예와 잘 작성되었으므로 설명이없는 예제 코드가 아니라 일부 답변을 게시하십시오.
abc123

2
게시 할 양식과 연결하는 방법을 모르겠습니다
Piotr Kamoda 2017 년

왜 설명이 없습니까?
Rich

3

추가하는 경우 :

jquery.form.min.js

간단하게 다음과 같이 할 수 있습니다.

<script>
$('#myform').ajaxForm(function(response) {
  alert(response);
});

// this will register the AJAX for <form id="myform" action="some_url">
// and when you submit the form using <button type="submit"> or $('myform').submit(), then it will send your request and alert response
</script>

노트:

위의 게시물에서 제안한 것처럼 간단한 $ ( 'FORM'). serialize ()를 사용할 수 있지만 FILE INPUTS ... ajaxForm () 에서는 작동하지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.