Javascript 尽管php脚本成功,Ajax POST仍会触发错误函数事件

Javascript 尽管php脚本成功,Ajax POST仍会触发错误函数事件,javascript,php,jquery,ajax,cordova,Javascript,Php,Jquery,Ajax,Cordova,我正在使用jquery、jquery mobile和html构建一个使用phonegap的移动应用程序 使用ajax在服务器中调用php脚本,效果良好;更新、插入数据和发送电子邮件。但是ajax错误函数通常被称为, 使用firebug,返回的是200 ok状态,不知道是什么触发了错误 我搜索了这个问题,并在这里找到了许多建议,比如使用complete()或done()函数代替success()和error(),响应json响应。。。但所有这些解决方案都不走运 一种解决方案是将此头添加到php脚本

我正在使用jquery、jquery mobile和html构建一个使用phonegap的移动应用程序

使用ajax在服务器中调用php脚本,效果良好;更新、插入数据和发送电子邮件。但是ajax错误函数通常被称为, 使用firebug,返回的是200 ok状态,不知道是什么触发了错误

我搜索了这个问题,并在这里找到了许多建议,比如使用complete()或done()函数代替success()和error(),响应json响应。。。但所有这些解决方案都不走运

一种解决方案是将此头添加到php脚本中

header("Access-Control-Allow-Origin: *");
header解决方案解决了我所有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>
php代码

<?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错误函数


除了标题解决方案,还有其他解决方案吗?多谢各位

出现一些未关闭的中断,请尝试以下操作:

$("#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);
        }

    });
});

首先,我认为,收集postData应该像
$(“#我的表单”)那样

url:'mydomainname.net/services/contact.php'

如果要发布到其他服务器,则url应设置为方案前缀

然而,我担心可能的安全风险


在服务器端,您可以检查域,然后决定是否发送允许的头。

Javascript中缺少一些右括号。您在开发人员工具的“网络”选项卡中看到了什么错误?AJAX服务器是否与客户端脚本位于同一域中?然后将域从URL中删除。你是对的,但这只是代码的一部分:)谢谢。这可能是因为服务器没有响应,请尝试回显PHP脚本中的内容谢谢如果我希望脚本接受移动应用程序的呼叫,如何检查域?For.serialize();是的,但它对我不起作用,不知道我在这里已经回答了什么:,请查看。谢谢。如果是另一个域请求,将其添加到允许列表中,这是非常有用的,但是如果是一个跨域加载和发布数据的移动应用程序,如何保护它?如果你的移动应用程序正在向服务器发出一些请求,这不是跨领域的。因为,您的请求是对服务器的直接请求。您应该检查服务器的“X-request-With”(ajax请求)头的可访问性,可能它们被服务器配置拒绝。
$("#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);
        }

    });
});