Ich habe eine Website mit Kleinanzeigen, und auf der Seite, auf der Anzeigen geschaltet werden, erstelle ich ein Formular "Tipp an einen Freund senden" ...
So kann jeder, der möchte, einen Tipp der Anzeige per E-Mail an Freunde schicken.
Ich vermute, das Formular muss auf einer PHP-Seite eingereicht werden, oder?
<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>
Beim Absenden des Formulars wird die Seite erneut geladen ... Ich möchte das nicht ...
Gibt es eine Möglichkeit, die Mail nicht neu zu laden und trotzdem zu senden? Vorzugsweise ohne Ajax oder Jquery ...
Vielen Dank
Sie müssen eine Ajax-Anfrage senden, um die E-Mail zu senden, ohne die Seite erneut zu laden. Werfen Sie einen Blick auf http://api.jquery.com/jQuery.ajax/
Ihr Code sollte ungefähr so aussehen:
$('#submit').click(function() {
$.ajax({
url: 'send_email.php',
type: 'POST',
data: {
email: '[email protected]',
message: 'hello world!'
},
success: function(msg) {
alert('Email Sent');
}
});
});
Das Formular wird im Hintergrund an die Seite send_email.php
gesendet, die die Anfrage bearbeiten und die E-Mail senden muss.
Ich habe gefunden, was ich denke, ist ein einfacher Weg. Wenn Sie ein Iframe in die Seite einfügen, können Sie den Ausgang der Aktion dort umleiten und so anzeigen, dass sie angezeigt wird. Sie können natürlich nichts tun. In diesem Fall können Sie die Anzeige von iframe auf none setzen.
<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>
Sie verwenden entweder AJAX oder Sie
Am schnellsten und einfachsten ist es, einen iframe zu verwenden. Setzen Sie einen Rahmen unten auf Ihre Seite.
<iframe name="frame"></iframe>
Und das in deiner Form.
<form target="frame">
</form>
und um den Rahmen in Ihrem CSS unsichtbar zu machen.
iframe{
display: none;
}
genau so kann es auch ohne jQuery und AJAX funktionieren und es funktioniert sehr gut mit einem einfachen iFrame. Ich liebe es, arbeitet in Opera10, FF3 und IE6. Dank einiger der oben genannten Plakate, die mich in die richtige Richtung weisen, poste ich nur deshalb hier:
<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>
der PHP-Code, der die Seite generiert, die oben aufgerufen wird:
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>
');
}
Hier ist ein Teil des Codes, den ich im Internet gefunden habe, um dieses Problem zu lösen
<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>
<?php
$name = $_POST['name'];
$descr = $_POST['descr'];
echo $name;
echo $descr;
?>
Dies sollte Ihr Problem verlangsamen.
In diesem Code rufen wir nach dem Klicken des Submit-Buttons jquery ajax auf und übergeben die URL zum Posten
geben Sie POST/GET ein
Daten: Dateninformationen Sie können Eingabefelder oder andere auswählen.
success: Rückruf, wenn vom Server alles in Ordnung ist
Funktionsparameter text, html oder json, Antwort vom Server
Erfolgreich können Sie Schreibwarnungen schreiben, wenn sich die Daten, die Sie erhalten haben, in einem bestimmten Zustand befinden und so weiter. oder führe deinen Code aus, was als nächstes zu tun ist .
<form id='tip'>
Tip somebody: <input name="tip_email" id="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/>
<input type="submit" id="submit" value="Skicka Tips"/>
<input type="hidden" id="ad_id" name="ad_id" />
</form>
<script>
$( "#tip" ).submit(function( e ) {
e.preventDefault();
$.ajax({
url: tip.php,
type:'POST',
data:
{
tip_email: $('#tip_email').val(),
ad_id: $('#ad_id').val()
},
success: function(msg)
{
alert('Email Sent');
}
});
});
</script>
Es ist in diesem Fall ein Muss, jquery-ajax
zu helfen. Ohne ajax
gibt es derzeit keine Lösung.
Rufen Sie zunächst eine JavaScript-Funktion auf, wenn das Formular gesendet wird. Setzen Sie einfach onsubmit="func()"
. Selbst wenn die Funktion aufgerufen wird, wird die Standardaktion der Übergabe ausgeführt. Wenn es ausgeführt wird, gibt es keine Möglichkeit, die Aktualisierung oder Weiterleitung der Seite zu verhindern. Die nächste Aufgabe besteht also darin, die Standardaktion zu verhindern. Fügen Sie am Anfang von func()
die folgende Zeile ein.
event.preventDefault()
Jetzt gibt es keine Umleitung oder Aktualisierung. So tätigen Sie einfach einen Ajax-Anruf von func()
und tun, was Sie tun möchten, wenn der Anruf endet.
Beispiel:
Bilden:
<form id="form-id" onsubmit="func()">
<input id="input-id" type="text">
</form>
Javascript:
function func(){
event.preventDefault();
var newValue = $('#input-field-id').val();
$.ajax({
type: 'POST',
url: '...',
data: {...},
datatype: 'JSON',
success: function(data){...},
error: function(){...},
});
}
Sie können versuchen, das Zielattribut Ihres Formulars auf einen ausgeblendeten Iframe festzulegen, damit die Seite, die das Formular enthält, nicht erneut geladen wird.
Ich habe es mit Datei-Uploads ausprobiert (von denen wir wissen, dass sie nicht über AJAX ausgeführt werden können), und es hat wunderbar funktioniert.
Haben Sie versucht, einen iFrame zu verwenden? Kein Ajax und die Originalseite wird nicht geladen.
Sie können das gesendete Formular als separate Seite im iframe anzeigen. Wenn es gesendet wird, wird die äußere/Containerseite nicht erneut geladen. Bei dieser Lösung wird keinerlei Ajax verwendet.
Ich habe etwas Ähnliches wie die jquery oben gemacht, aber ich musste meine Formulardaten und die Grafik-Attachment-Canvases zurücksetzen ... Hier habe ich folgendes gefunden:
<script>
$(document).ready(function(){
$("#text_only_radio_button_id").click(function(){
$("#single_pic_div").hide();
$("#multi_pic_div").hide();
});
$("#pic_radio_button_id").click(function(){
$("#single_pic_div").show();
$("#multi_pic_div").hide();
});
$("#gallery_radio_button_id").click(function(){
$("#single_pic_div").hide();
$("#multi_pic_div").show();
});
$("#my_Submit_button_ID").click(function() {
$("#single_pic_div").hide();
$("#multi_pic_div").hide();
var url = "script_the_form_gets_posted_to.php";
$.ajax({
type: "POST",
url: url,
data: $("#html_form_id").serialize(),
success: function(){
document.getElementById("html_form_id").reset();
var canvas=document.getElementById("canvas");
var canvasA=document.getElementById("canvasA");
var canvasB=document.getElementById("canvasB");
var canvasC=document.getElementById("canvasC");
var canvasD=document.getElementById("canvasD");
var ctx=canvas.getContext("2d");
var ctxA=canvasA.getContext("2d");
var ctxB=canvasB.getContext("2d");
var ctxC=canvasC.getContext("2d");
var ctxD=canvasD.getContext("2d");
ctx.clearRect(0, 0,480,480);
ctxA.clearRect(0, 0,480,480);
ctxB.clearRect(0, 0,480,480);
ctxC.clearRect(0, 0,480,480);
ctxD.clearRect(0, 0,480,480);
} });
return false;
}); });
</script>
Das funktioniert gut für mich, wenn Sie nur ein HTML-Formular verwenden, können Sie diesen Code wie folgt vereinfachen:
<script>
$(document).ready(function(){
$("#my_Submit_button_ID").click(function() {
var url = "script_the_form_gets_posted_to.php";
$.ajax({
type: "POST",
url: url,
data: $("#html_form_id").serialize(),
success: function(){
document.getElementById("html_form_id").reset();
} });
return false;
}); });
</script>
Eine weitere Möglichkeit besteht darin, einen direkten Javascript-Link zu Ihrer Funktion zu erstellen:
<form action="javascript:your_function();" method="post">
...
wenn Sie auf derselben Seite einreichen, auf der sich das Formular befindet, können Sie die Formular-Tags ohne Aktion schreiben, und das Formular wird so gesendet
<form method='post'> <!-- you can see there is no action here-->
Sie müssen JavaScript verwenden, ohne zu einer iframe
(hässlichen Ansatz) zu führen.
Sie können es in JavaScript tun; Die Verwendung von jQuery macht es schmerzlos.
Ich schlage vor, Sie checken AJAX und Posting.