我正在使用jquery,jquery mobile和html来构建使用phonegap的移动应用程序。
使用ajax在服务器中调用php脚本,工作正常;更新,插入数据和发送电子邮件。但是ajax错误函数总是被称为, 使用firebug,返回200 ok状态,不知道是什么触发了错误。
我已经搜索过这个问题,并在这里找到了很多建议,例如使用complete()或done()函数而不是success()和error(),回显json响应......但是对于所有这些解决方案都没有运气。
一个解决方案是将此标头添加到php脚本,
header("Access-Control-Allow-Origin: *");
标题解决方案解决了我所有ajax post脚本的问题,但我担心可能的安全风险,因为它应该在移动应用程序中运行。
另外,当我们需要访问数据库时添加这样的头文件可能是逻辑但是如果我们有一个调用php邮件功能的联系表单并且不会发生数据库更改,为什么我们还需要添加该头文件呢?
联系表格
<div data-role="header" data-position="fixed" >
<input type="button" value="Send" name="sendbutton" id="sendbtn" />
<h1>contact us</h1>
<a data-rel="back" data-icon="arrow-r" data-iconpos="notext"></a>
</div>
<div data-role="content" >
<form id="contact-us" >
<input type="text" id="contactName" placeholder="Name" />
<input type="email" id="email" placeholder="Your Email" />
<input type="text" id="subject" placeholder="Message Subject" />
<textarea rows="20" cols="30" id="message" placeholder="Message.." ></textarea>
</form>
</div>
Jquery脚本
$("#sendbtn").click(function(event){
$("#sendbtn").disabled =true;
var postData ="";
if($("#contactName").val().length == 0 ||$("#email").val().length == 0 ||$("#subject").val().length == 0||$("#message").val().length == 0)
alert("Sorry but some required fields are empty !");
else {
if (!regex.test($("#email").val()))
alert("Please check that you write email correctly!");
else {
postData='contactName=' + $("#contactName").val() + '&email=' + $("#email").val() + '&subject=' + $("#subject").val() + '&message=' + $("#message").val();
$.ajax({
type: 'POST',
data: postData,
url: 'mydomainname.net/services/contact.php',
success: function(){
$('input').not('[type="button"]').val('');
$('textarea').val('');
alert('Message was Sent, Thank you!');
},
error: function () {
alert('Sorry, Error occurred ');
$('.error').fadeIn(1000);
}
});
}
}
});
php code
<?php
if ( isset($_POST['email']) && isset($_POST['contactName']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}
mail( "myemail@mydomainname.net", "Contact Form: ".$_POST['contactName']." Title ".$_POST['subject'], $_POST['message'], "From:" . $_POST['email']);
}
?>
代码发送电子邮件但始终称为ajax错误函数
任何其他解决方案而不是标头解决方案?谢谢。
答案 0 :(得分:0)
有一些不公开的休息时间,试试这个:
$("#sendbtn").click(function(event){
$("#sendbtn").disabled =true;
var postData ="";
if($("#contactName").val().length == 0 ||$("#email").val().length == 0 ||$("#subject").val().length == 0||$("#message").val().length == 0) {
alert("Sorry but some required fields are empty !");
} else {
if (!regex.test($("#email").val())) {
alert("Please check that you write email correctly!");
} else {
postData='contactName=' + $("#contactName").val() + '&email=' + $("#email").val() + '&subject=' + $("#subject").val() + '&message=' + $("#message").val();
}
}
$.ajax({
type: 'POST',
data: postData,
url: 'contact.php',
success: function(){
$('input').not('[type="button"]').val('');
$('textarea').val('');
alert('Message was Sent, Thank you!');
},
error: function ()
{
alert('Sorry, Error occurred ');
$('.error').fadeIn(1000);
}
});
});
答案 1 :(得分:0)
首先,我认为,收集postData应该像$('#my-form').serialize();
url:'mydomainname.net/services/contact.php'
url应设置为scheme prefix,如果你想发布到另一台服务器。
然而,我担心可能的安全风险。
在服务器端,您可以检查域名,然后决定 - 是否发送允许的标头。