我正在尝试将数据添加到数据库中,并且由于某种原因它并不总是有效。我会说有80%的时间它会工作,我会在数据库中看到结果,但有时它会像脚本一样不会运行。
这里是ajax:
<script type="text/javascript">
$(document).ready(function () {
$(function () {
$('.error').hide();
$("#success").hide();
$(".button").click(function () {
$('.error').hide();
var name = $("input#name").val();
if (name == "") {
$("label#name_error").show();
$("input#name").focus();
return false;
}
$.ajax({
type: 'POST',
url: "class/proccess.php",
data: $("input#name"),
cache: false,
success: function () {
$("#success").fadeIn(200).show();
}
});
});
});
});
</script>
这是html:
<div id = "contact_form">
<form name ="contact" action="">
<fieldset>
<label for="name" id="name_label">Name</label>
<input type="text" name="name" id="name" size="30" value="" class="text-input" />
<label class="error" for="name" id="name_error">This field is required.</label>
<br />
<input type="submit" name="submit" class="button" id="submit_btn" value="send" />
</fieldset>
<span id="success"> the name has been updated successfully!</span>
</form>
</div>
<div id ="upd"></div>
这是proccess.php文件:
<?php
$va = $_POST["name"];
$dbconnection = mysql_connect('adatabase','someuser','somepw');
if(!mysql_select_db('some_database', $dbconnection)) {
echo mysql_error();
}
else
{
echo 'connection success';
}
$sql = "INSERT INTO some_db(text) VALUES ('$va')";
$result = mysql_query($sql) or die('erreur sql!'.mysql_error());
if(!$result) {
echo "not working";
}
else {
echo "working";
}
?>
那么为什么它并不总是插入数据库?
有没有办法从php获取结果if(!$ result)显示在ajax的成功部分?
答案 0 :(得分:1)
如果有时不工作,则需要检查返回的字符串是否有错误。使用AJAX执行此操作的正确方法如下。
您可以在成功回调中包含一个参数,该参数将从PHP获取页面结果。
而不是
success: function () {
...
}
使用
success: function (data) {
alert(data);
}
答案 1 :(得分:1)
您实际上是将jQuery-Object传递给PHP文件。
$.post("class/proccess.php", {
name: $("input#name").val() //Pass val() not the whole jQuery-Object!
}, function() {
/* success */
});
答案 2 :(得分:1)
在您进行调试时,请确保已启用MySQL错误。
在用于Ajax成功处理程序的Javascript中,显示包含调用返回的文本的警报。这样,如果MySQL出现错误,您就会看到它。
另一件事是,&#34;文本&#34;字段在数据库中设置为UNIQUE?在这种情况下,尝试插入带有重复字符串的新记录将失败。
并且......该字段的名称并非真正的&#39;文本&#39;是吗?我建议避免使用与MySQL基本数据类型相同的字段名称。只是为了避免混淆,如果没有其他原因。
答案 3 :(得分:0)
将您的ajax调用更改为:
$.ajax({
type: 'POST',
url: "class/proccess.php",
data: {name : $("input#name").val()},
cache: false,
success: function () {
$("#success").fadeIn(200).show();
}
这样$ _POST ['name']设置为输入框的值。
另外,正如建议的那样,您应该将mysql函数更改为mysqli函数以帮助防止sql注入。