我是使用AJAX或jQuery的新手,我试图在不加载另一页的表中插入一些数据,我不能。
这是我的AJAX函数: 编辑:
function SumbitAction(act_id) {
$.ajax({
dataType: 'json',
type: "POST",
url: 'Accion.php',
data: {Action:act_id},
success: function (obj, textstatus) {
if(obj.status==='FAIL') {
console.log(obj.message);
}
else {
console.log("ok");
}
}
});
}
在我的PHP中,我目前不提供任何参数来测试完整的null插入查询:编辑:
$consultaAcciones= "INSERT INTO acciones VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
$ejecAcciones = mysqli_query($conn, $consultaAcciones);
if($ejecAcciones===false){
$response = [
'status' => 'FAIL',
'message' => 'Accion no registrada correctamente'
];
}
else {
$response = [
'status' => 'OK',
'message'=> 'Accion registrada'
];
}
header("Content-type: application/json");
echo json_encode($response);
我在控制台日志中收到“错误”,我不知道出了什么问题。编辑:不再
编辑: 现在它不显示任何错误,可以,但是在一切正常时也不会显示我的控制台日志,同时还会收到警告消息:“跨域读取阻止(CORB)阻止了跨域响应” 和一个日志:XHR完成加载:POST“ http:// url ...”。 用这种方式指定我的函数的调用者可能不正确吗?
function addListener(id,num)
{
var target= document.getElementById(id);
if(target){
target.addEventListener("click",SumbitAction(num),false);
}
else{
//console.log("Nel",id);
}
}
答案 0 :(得分:1)
代码中有2个问题。
首先,if(('error')) {
的总评估值为true
。 'error'
只是一个字符串,即truthy。
您可能打算将该字符串与某些内容进行比较(也可以删除双括号):
if (textstatus === 'error') {
接下来,textstatus
是请求的状态,而不是您的代码的状态。例如,当服务器发出404或500响应时,它将为error
。如果您的INSERT
失败,则http请求仍然会成功,而textstatus
不会是error
。
如果要添加回调,则可能需要在textstatus
回调中检查error()
。但是在success()
回调中,您可能想检查您的 code 返回的内容。在这种情况下,就是obj
。
但是查看PHP,它不会返回JS可以使用的任何可预测的内容。如果查询有效,则不返回任何内容。如果失败,它将返回一个以Error
开头的字符串,然后显示一个MySQL错误,我们将不知道该错误,因此您无法在JS中对其进行测试。
最好简单地返回一些true / false,OK / fail类型的msg,例如:
// ... rest of your code
$result = mysqli_query($conn, $consultaAcciones);
if ($result === false) {
echo "FAIL";
} else {
echo "OK";
}
在您的JS中:
if (obj === 'FAIL') {
// ... etc
如果您实际上想从PHP传回消息,则应该让它回显JSON对象,例如:
$result = mysqli_query($conn, $consultaAcciones);
if ($result === false) {
$response = [
'status' => 'FAIL',
// You shouldn't reveal internal details about errors
// so don't return mysqli_error(). Maybe log it, and
// display something generic to your users.
'message' => 'There was a problem'
];
} else {
$response = [
'status' => 'OK',
'message'=> ''
];
}
header("Content-type: application/json");
echo json_encode($response);
在您的JS中:
$.ajax({
// ...
// specify we will get a JSON response
dataType: 'json'
// ...
success: function (obj, textstatus) {
if (obj.status === 'FAIL') {
alert(obj.message);
} else {
// all ok ...
}
});