[php] 페이지를 다시로드하지 않고 양식 제출
구인 웹 사이트가 있는데 광고가 게재되는 페이지에서 “친구에게 팁 보내기”양식을 만들고 있습니다.
따라서 원하는 사람은 친구에게 이메일 주소로 광고 팁을 보낼 수 있습니다.
양식이 PHP 페이지에 제출되어야한다고 생각합니다. 맞습니까?
<form name='tip' method='post' action='tip.php'>
Tip somebody: <input name="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/>
 <input type="submit" value="Skicka Tips"/>
 <input type="hidden" name="ad_id" />
 </form>
양식을 제출할 때 페이지가 새로 고침됩니다 … 원하지 않습니다 …
다시로드하지 않고 메일을 보낼 수있는 방법이 있습니까? 바람직하게는 ajax 또는 jquery없이 …
감사
답변
페이지를 다시로드하지 않고 이메일을 보내려면 ajax 요청을 제출해야합니다. http://api.jquery.com/jQuery.ajax/를 살펴보십시오.
코드는 다음과 같은 내용이어야합니다.
$('#submit').click(function() {
    $.ajax({
        url: 'send_email.php',
        type: 'POST',
        data: {
            email: 'email@example.com',
            message: 'hello world!'
        },
        success: function(msg) {
            alert('Email Sent');
        }
    });
});
양식은 send_email.php요청을 처리하고 이메일을 보내야하는 페이지에 백그라운드로 제출됩니다 .
답변
더 쉬운 방법이라고 생각하는 것을 찾았습니다. 페이지에 Iframe을 삽입하면 액션의 이탈을 리디렉션하여 표시 할 수 있습니다. 물론 아무것도 할 수 없습니다. 이 경우 iframe 표시를 없음으로 설정할 수 있습니다.
<iframe name="votar" style="display:none;"></iframe>
<form action="tip.php" method="post" target="votar">
    <input type="submit" value="Skicka Tips">
    <input type="hidden" name="ad_id" value="2">
</form>
답변
AJAX를 사용하거나
- iframe 생성 및 문서에 추가
- iframe 이름을 ‘foo’로 설정
- 양식 대상을 ‘foo’로 설정
- 제출
- 양식 작업이 ‘parent.notify (…)’로 자바 스크립트를 렌더링하여 피드백을 제공하십시오.
- 선택적으로 iframe을 제거 할 수 있습니다.
답변
가장 빠르고 쉬운 방법은 iframe을 사용하는 것입니다. 페이지 하단에 프레임을 넣으십시오.
<iframe name="frame"></iframe>
그리고 당신의 형태로 이것을하십시오.
<form target="frame">
</form>
CSS에서 프레임을 보이지 않게 만듭니다.
iframe{
  display: none;
}
답변
페이지를 다시로드하지 않고 양식을 제출하고 동일한 페이지에서 제출 된 데이터의 결과를 가져옵니다.
이 문제를 해결하기 위해 인터넷에서 찾은 코드는 다음과 같습니다.
1.) IFRAME
양식이 제출되면 작업이 실행되고 다시로드 할 특정 iframe을 대상으로합니다.
index.php
<iframe name="content" style="">
</iframe>
<form action="iframe_content.php" method="post" target="content">
<input type="text" name="Name" value="">
<input type="submit" name="Submit" value="Submit">
</form>
iframe_content.php
<?php
if (isset($_POST['Submit'])){
$Name = $_POST['Name'];
echo $Name;
}
?>
2.) AJAX
Index.php :
   <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/core.js">
    </script>
    <script type="text/javascript">
    function clickButton(){
    var name=document.getElementById('name').value;
    var descr=document.getElementById('descr').value;
    $.ajax({
            type:"post",
            url:"server_action.php",
            data:
            {
               'name' :name,
               'descr' :descr
            },
            cache:false,
            success: function (html)
            {
               alert('Data Send');
               $('#msg').html(html);
            }
            });
            return false;
     }
    </script>
    <form >
    <input type="" name="name" id="name">
    <input type="" name="descr" id="descr">
    <input type="submit" name="" value="submit" onclick="return clickButton();">
    </form>
    <p id="msg"></p>
server_action.php
<?php
$name = $_POST['name'];
$descr = $_POST['descr'];
echo $name;
echo $descr;
?>
답변
jquery-ajax이 경우 도움을 받아야합니다 . 이 없으면 ajax현재 해결책이 없습니다.
먼저 양식이 제출 될 때 JavaScript 함수를 호출하십시오. 그냥 설정하십시오 onsubmit="func()". 함수가 호출 되더라도 제출의 기본 작업이 수행됩니다. 수행되는 경우 페이지 새로 고침 또는 리디렉션을 중지 할 방법이 없습니다. 따라서 다음 작업은 기본 동작을 방지하는 것입니다. 시작 부분에 다음 줄을 삽입합니다 func().
event.preventDefault()
이제 리디렉션 또는 새로 고침이 없습니다. 그래서, 당신은 단순히 ajax 전화를 func()걸고 전화가 끝났을 때 원하는 것을 할 수 있습니다.
예:
형태:
<form id="form-id" onsubmit="func()">
    <input id="input-id" type="text">
</form>
자바 스크립트 :
function func(){
    event.preventDefault();
    var newValue = $('#input-field-id').val();
    $.ajax({
        type: 'POST',
        url: '...',
        data: {...},
        datatype: 'JSON',
        success: function(data){...},
        error: function(){...},
    });
}
답변
이것이 바로 jQuery 및 AJAX없이 작동 할 수있는 방법이며 간단한 iFrame을 사용하여 매우 잘 작동합니다. I LOVE IT는 Opera10, FF3 및 IE6에서 작동합니다. 저에게 올바른 방향을 알려주는 위의 포스터 덕분에 제가 여기에 게시하는 유일한 이유입니다.
<select name="aAddToPage[65654]"
onchange="
    if (bCanAddMore) {
        addToPage(65654,this);
    }
    else {
        alert('Could not add another, wait until previous is added.');
        this.options[0].selected = true;
    };
" />
<option value="">Add to page..</option>
[more options with values here]</select>
<script type="text/javascript">
function addToPage(iProduct, oSelect){
    iPage = oSelect.options[oSelect.selectedIndex].value;
    if (iPage != "") {
        bCanAddMore = false;
        window.hiddenFrame.document.formFrame.iProduct.value = iProduct;
        window.hiddenFrame.document.formFrame.iAddToPage.value = iPage;
        window.hiddenFrame.document.formFrame.submit();
    }
}
var bCanAddMore = true;</script>
<iframe name="hiddenFrame" style="display:none;" src="frame.php?p=addProductToPage" onload="bCanAddMore = true;"></iframe>
위에서 호출되는 페이지를 생성하는 PHP 코드 :
if( $_GET['p'] == 'addProductToPage' ){  // hidden form processing
  if(!empty($_POST['iAddToPage'])) {
    //.. do something with it..
  }
  print('
    <html>
        <body>
            <form name="formFrame" id="formFrameId" style="display:none;" method="POST" action="frame.php?p=addProductToPage" >
                <input type="hidden" name="iProduct" value="" />
                <input type="hidden" name="iAddToPage" value="" />
            </form>
        </body>
    </html>
  ');
}
