por - El método php POST no funciona con jquery Ajax o sin Ajax
enviar datos por ajax (2)
He buscado la pregunta en stackoverflow y encontré pocas respuestas, pero ninguna de ellas me fue útil. Así que lo estoy posteando de nuevo. Mi formulario php con el método de publicación en localhost funciona bien, pero el mismo código no funciona en el servidor (servidor Linux). No sé cuál es el problema real. Por favor, ayuda
- formulario que quiero enviar
<form class="forma" id="forma" method="POST" action="contact-form.php" name="myForm" autocomplete="off">
<div class="formWrapper">
<div class="group">
<input type="text" name="name" id="name">
<span class="highlight"></span>
<span class="bar"></span>
<label>Name</label>
<p class="error-red"></p>
</div>
<div class="group">
<input type="text" name="eMail" id="eMail">
<span class="highlight"></span>
<span class="bar"></span>
<label>Email</label>
<p class="error-red"></p>
</div>
<div class="group">
<input type="text" name="mobileNo" id="mobileNo">
<span class="highlight"></span>
<span class="bar"></span>
<label>Mobile no.</label>
<p class="error-red"></p>
</div>
<div class="group">
<input type="text" name="message" id="message">
<span class="highlight"></span>
<span class="bar"></span>
<label>Message</label>
</div>
<div class="captchaWrapper">
<img src="captcha.php?rand=<?php echo rand(); ?>" id="captchaimgCont" style="margin-right: 14px;" alt="captcha">
<a href="javascript: refreshCaptcha();" class="clickTorefreshAnchor">
<i class="fa fa-refresh clickTorefresh" id="caprefresh">
</i>
</a>
<div class="captchaInputWrapper group">
<input type="text" id="6_letters_code" name="captcha">
<span class="highlight"></span>
<span class="bar"></span>
<label>Enter the code here:</label>
<p class="error-red"></p>
</div>
</div>
<div class="submit submitBtn" id="consubmit">
<button type="submit" name="sendmail" id="sendmail" class="sendMailBtn">Submit
</button>
</div>
</div>
<div class="clear"></div>
</form>
- mi código jquery ajax
jQuery(document).ready(function() {
jQuery("#forma").submit(function(e) {
e.preventDefault();
e.stopImmediatePropagation();
jQuery(''#sendmail'').html(''Please wait...'');
jQuery.ajax({
type: "post",
url: ''./contact-form.php'',
data: jQuery("#forma").serialize(),
dataType: "json",
success: function(data) {
jQuery(''p.error-red'').html('''');
if (''success'' == data.result) {
//jQuery("#forma")[0].reset();
//jQuery(''#response'').append(''<p class="successMessage">'' + data.msg + ''</p>'');
// jQuery(''#sendmail'').html(''Submit'');
window.location.href = "https://www.mrpmediaworks.com/thanks.php";
}
if (''error'' == data.result) {
var arr = data.msg;
var element_arr = data.fieldname;
count = ''0'';
jQuery.each(arr, function(index, value) {
if (value.length != 0) {
jQuery(''input[name='' + element_arr[count] + '']'').parent(''.group'').find(''p.error-red'').html(value);
}
count++;
});
jQuery(''#sendmail'').html(''Submit'');
}
}
});
return false;
});
});
- mi código php
<?php
session_start();
require_once(''config.php'');
$email = '''';
$fieldname = array();
$msg = array();
$result = '''';
$count = '''';
$name = $_Post["name"];
$contact = $_Post["mobileNo"];
$email = $_Post["eMail"];
$msg_query = $_Post["message"];
$captcha = $_Post["captcha"];
echo $name;
die();
?>
solo prueba el código
el mismo código funciona con get
Intenté eliminar la acción del formulario y es posible que se combinen pero que funcionen. después de editar
4. .htaccess file
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}/ /([^/ ]+)/.php
RewriteRule ^/?(.*)/.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
este es el único contenido en mi archivo htaccess
Creo que has estropeado tu archivo htaccess. si es posible, pegue aquí su código de archivo .htaccess.
Editando mi respuesta
Bingo encontró el problema que está eliminando la extensión .php de sus archivos, pero en la solicitud ajax ha publicado datos en contact-form.php. Intente eliminar la extensión .php de su solicitud de ajax. Pruébalo espero que esto ayude.
Simplemente haga una función para manejar la solicitud de ajax. Luego, procese la solicitud dentro de la función. Para hacer eso,
Elimina la acción de la forma. y enviar la solicitud a la función en el envío ver el siguiente, por ejemplo.
<form class="forma" id="forma" method="POST" action="javascript:void(0);" name="myForm" autocomplete="off" onsubmit="sendContactRequest();">
Entonces el ~ sendContactRequest () ~ manejará su solicitud de Ajax.
function sendContactRequest(){
jQuery(''#sendmail'').html(''Please wait...'');
$.post("contact-form.php",jQuery("#forma").serialize(),function(result,status,xhr) {
if( status.toLowerCase()=="error".toLowerCase() ) {
alert("An Error Occurred.."); // or do something that you can handle the error request.
}else { //success response
}
});
}
Por favor, intente esto. En mi caso, funciona perfectamente.