2015-06-21 141 views
0

我正在研究一个网页,其中包含一个提示用户输入他/她的电子邮件地址的弹出窗口。数据应该在提交后上传到数据库。使用Ajax,PHP和jQuery提交表单

但是,电子邮件地址没有上传到数据库,我不知道为什么。数据库连接肯定已建立,并且不会产生错误消息。

我是使用AJAX/jQuery的真正初学者。

内部的index.php:

<form form id="email_submit" action="insert.php" method="post" target="_top"> 

    <label>Email Address</label> 
    <input type="text" name = "emailaddress" /> 
    <input type="submit" value="Add Email" onClick="send_data_to_server()"> 
</form> 

内部insert.php:

$username = "root"; 
$password = "root"; 
$hostname = "localhost"; 
$database = "emails"; 

$dbhandle = mysql_connect($hostname, $username, $password) 
or die("0"); 
echo "Connected to MySQL <br>"; 

$selected = mysql_select_db("emails", $dbhandle) 
or die("0"); 
echo "connected to db <br>"; 

$youremail = $mysqli->real_escape_string($_POST["emailaddress"]); 
echo "$youremail"; 
mysql_query("INSERT INTO email_table (emailAddress) VALUES ('$youremail')"); 
echo json_encode($youremail); 

的AJAX脚本(放置在索引页主体的端部):

function send_data_to_server() { 

    $("email_submit").submit(function (ev) { 
     ev.preventDefault(); 
     $.ajax({ 
      type : 'POST', 
      url : "insert.php", 

      data : { "formData" : $("#email_submit").serialize() }, 
      datatype : 'html', 
      success: function(data) { 
       alert(data); 
      } 
     }); 
    }); 
} 

网页上的输出:

Connected to MySQL 
connected to db 

任何帮助表示赞赏。

+0

1)仅是你的问题,放在哪里Ajax的功能? 2)您是否尝试将其添加到页面末尾的脚本标记中? 3)你有什么错误吗? –

+0

你在某处声明'formData'吗? – Stryner

+0

不知道在哪里放置函数只是一个问题,我确实把它放在页面末尾的脚本标记中。 – CarlyQ

回答

0

首先,您可以将ajax函数放在<script></script>标签之间的文件末尾。 二,编辑你的功能并用serialize()方法提交表单思想jquery。一个ID添加到您的格式如

<form id="email_submit" action="insert.php" method="post" target="_top"> 

和编辑这样

$.ajax({ 
    type : "POST", 
    url : "insert.php", 
    data : $("#email_submit").serialize(), 
    datatype : 'html', 
    success: function(data) {   
    alert(data); 
    } 
}); 

而且功能不要忘记real_escape_string

+0

我仍然得到TypeError的错误消息:null不是一个对象(评估'$(“email_submit”)。提交') – CarlyQ

0

来净化你的$_POST变量的值添加这里面的代码(秀下面)脚本标签<脚本> </script>

$("form").submit(function (ev) { 
     ev.preventDefault(); //prevent form from default submit 
     $.ajax({ 
      type: 'POST', 
      url: "localhost:8888/insert.php", 
      data: $('form').serialize() 
     }).done(function (data) { 
      console.log(data); 
     }); 
    }); 

使用ev.preventDefault()防止默认提交表单
删除FORMDATA和使用$( '形式')。序列化(),它将系列化你的表单输入。

+0

我仍然得到TypeError错误消息:null不是一个对象(评估' $(“email_submit”)。submit') – CarlyQ

+0

从表单中删除不需要的属性....只需添加这个

,不需要表单id =“email-submit”:) :) –

+0

请看我的js fi ddle的完整解释。不要忘了添加jquery到你的html页面....我已经为你做了这个...如果你满意不要忘记投票了:) tnx https://jsfiddle.net/uypgb6h0/ –

1

你的脚本部分是错误的。您没有正确关闭功能。它应该更喜欢这个

function send_data_to_server() { 

    $("email_submit").submit(function (ev) { 
     ev.preventDefault(); 
     $.ajax({ 
      type : 'POST', 
      url : "insert.php", 

      data : { "formData" : $("#email_submit").serialize() }, 
      datatype : 'html', 
      success: function(data) { 
       alert(data); 
      } 
     }); 
    }); 
} 

这就是为什么你在你的jQuery选择得到错误

SyntaxError: Unexpected token '}'. Expected ')' to end a argument list.

+0

你100%正确,谢谢 – CarlyQ

+0

现在处理新的错误... – CarlyQ

+0

如果这个答案对你有帮助,请做upvote – 2015-06-21 09:26:07

0

你缺少#。它应该是:

$("#email_submit").submit(function (ev) { ... 

然后,这可能会工作,但它有点奇怪。您有一个按钮的点击处理程序,用于在按钮的窗体上创建提交处理程序。这有可能为表单创建多个提交处理程序(每个按钮单击一个),这可能会产生不良副作用。在实践中,按钮通常只会被点击一次,所以你可能会得到不能立即显示并且很难重现的错误。

相反,您应该在文档就绪处理程序中创建一次提交处理程序。根本不需要点击处理程序,因为点击按钮只是提交表单的一种方式。

$(init);         // document ready event binding 
 
function init() {       // document ready handler function 
 
    $("#email_submit").submit(ajaxSubmit); // form submit event binding 
 
} 
 
function ajaxSubmit(ev) {     // form submit handler function 
 
    ev.preventDefault(); 
 
    $.ajax({ 
 
     type: 'POST', 
 
     url: "insert.php", 
 
     data: { formData: $(this).serialize() }, 
 
     datatype: 'html', 
 
     success: function(data) { 
 
      alert(data); 
 
     } 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="email_submit" action="insert.php" method="post" target="_top"> 
 
    <label>Email Address</label> 
 
    <input type="text" name = "emailaddress" /> 
 
    <input type="submit" value="Add Email"> 
 
</form>

+0

当我在当前代码中添加#我得到[Error] TypeError:null不是一个对象(评估'$ “#email_submit”)。submit') \t send_data_to_server(localhost,640行) \t onclick(localhost,line 172) – CarlyQ

+0

并在文档中添加脚本nt ready handler让网站直接进入表单验收(insert.php) – CarlyQ

+0

我不确定要告诉你什么。在我的代码片段中,提交处理程序不会执行,直到单击按钮,并且没有错误(除了关于ajax调用失败的错误,这是在此环境中预期的错误)。 – gilly3