[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>
');
}