我需要向我的控制器发送请求,但是ajax投掷和错误。我似乎无法弄清楚为什么。这是代码
HTTPS在定义常量之前,我不能写在这里!
$("input").on("click", function(){
var elem = $(this).attr("id");
var execute;
if( $(elem).prop('checked') == true ){
execute = '+';
} else {
execute = '-';
}
$.ajax({
type:'POST',
url: HTTPS+'/path/to/controller/ctlAccess.php?do='+execute,
data: {id:elem},
success: function(data) {
console.log(data);
},
error: function(){
console.log("An error occurred: " + status + "nError: " + error); //AND ERROR: An error occurred: [object Object]nError: error
}
});
});
});
这是控制器:
$SysData = new SysTables;
if ($_GET["do"] == "-") {
$userId = preg_match('/[0-9]*(?=p)/', $_POST['id']);
$pageId = preg_match('/(?<=p)[0-9]*/', $_POST['id']);
$result = $SysData->deleteAccess($userId, $pageId);
$data = "ACCESS FOR ". $_POST['id']." DELETED";
echo $data;
}
我认为请求甚至没有控制器!我实际上并不知道这是错误。但是文件路径是正确的,而elem获得ir值的部分也是如此,所以我不知道错误在哪里!?请帮助,thx
答案 0 :(得分:1)
您应该在AJAX调用中指定预期的dataType
,如下所示:
dataType: 'HTML'
我还建议切换到所有POST数据
所以这是整个AJAX的事情(在后端更改你的控制器以使用$_POST['do']
):
$.ajax({
type:'POST',
url: HTTPS+'/path/to/controller/ctlAccess.php',
data: {
'id':elem,
'do':execute // do might be a reserved word so just encase it in quotes to force it as a string
},
dataType: 'HTML',
success: function(data) {
console.log(data);
},
error: function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
}
});
我想知道HTTPS
究竟是什么。只要您不想提出跨域请求,那么您真的不应该需要它。
如果您正在尝试制作跨域请求,那么它就是一个单独的野兽。
答案 1 :(得分:0)
您在URL的末尾追加“执行”值。由于“execute”是一个加号,它将被转换为单个空格,并可能被jQuery作为无效URL丢弃。 您可能会尝试使“执行”内容更具可读性。
您可能还想略微修改错误处理程序,试试这个:
error: function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});