我有一个没有目的地的锚链接,但确实有一个$ bash which.sh
: command not found:
'which.sh: line 5: syntax error near unexpected token `do
'which.sh: line 5: `do
:
onClick event
据我所知,由于PHP的性质和它是服务器端语言,我不能直接在JavaScript中执行PHP代码块,因此我必须使用AJAX来实现。
点击<li><a href onClick='deletePost()'> Delete </a> </li>
链接后,我需要它来执行此查询( del_post.php )
delete
我尝试使用类似的过去问题来理解AJAX,但由于相对较新,我无法完全掌握它的语言。这是我尝试过的:
<?php include("connect.php");
$delete_query = mysqli_query ($connect, "DELETE FROM user_thoughts WHERE id = 'id' ");
?>
但点击该链接只会将网址更改为 function deletePost() {
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
xmlhttp.open("GET", "del_post.php", false);
xmlhttp.send();
}
}
}
。
答案 0 :(得分:4)
我相信(主要)问题是你的空白&#34; href&#34;属性。删除它,或将其更改为href="#"
或旧学校href="javascript:void()"
(只需将其删除,即可)。
我使用XMLHttpRequest已经有一段时间了,而不是像jQuery's .ajax那样,但我认为你需要这样做(大多数情况下你需要.open/send
才能看到国家变化):
var xmlHttpReq = new XMLHttpRequest();
if (xmlHttpReq) {
xmlHttpReq.open('GET', 'your-uri-here.php', true/false);
xmlHttpReq.onreadystatechange = function () {
if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
console.log('success! delete the post out of the DOM or some other response');
}
else {
console.log('there was a problem');
}
}
xmlHttpReq.send();
}
答案 1 :(得分:3)
你能提供你的:del_post.php文件吗? 通常,您可以在
中显示文字或提醒<div id="yourname"></div>
在AJAX请求中使用回调:
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("yourname").innerHTML = xmlhttp.responseText;
}
此响应来自您的PHP文件,例如:
function remove_record(ARG){
if ($condition==true)
echo "TRUE";
else
echo "FALSE";
}
答案 2 :(得分:3)
您应该从锚标记中删除 href 属性,并使用CSS为该元素设置样式。
此外,您的脚本应如下所示:
<script>
function deletePost() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
// Do something if Ajax request was successful
}
};
xhttp.open("GET", "del_post.php", true);
xhttp.send();
}
</script>
答案 3 :(得分:3)
您正在尝试在回调中发出http请求。 你只需将它移到外面:
function deletePost() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET", "del_post.php", false);
xmlhttp.send();
}
删除href
属性将阻止刷新。我相信这在HTML5中有效。
答案 4 :(得分:2)
好的......我只是一个业余爱好者,所以请原谅我输入中的任何不准确之处但是这样做:我在<a>
元素中用于ajax调用的格式是:
<a href="javascript:" onclick="functionThatReallyCallsAjax()">
这样我就有了更大的灵活性(如果我需要在发送ajax之前检查一下)。现在,对于ajax调用,您需要:
所以我们有这个功能 - 不是我的,从成千上万的地方汲取 - 可能在这里:) - 也许众所周知,我向作者道歉,他是一个天才:这就是你所谓的ajax的事情, 'url'是你要'ajax'的文件,'success'是处理结果的函数的名称,error是处理IO错误的函数的名称。
function doAjaxThing(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
// try an older version
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if (!req) return false;
if (typeof success != 'function') success = function () {};
if (typeof error!= 'function') error = function () {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ?
success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}
您自然需要包含成功+错误功能:
function dealWithResponse(textFromURL)
{
//textFromURL is whatever, say, a PHP you called in the URL would 'echo'
}
function ohNo()
{
//stuff like URL not found, etc.
alert("I/O error");
}
现在您已经掌握了这一点,这就是您在<a>
调用的函数内构成真实调用的方式:
function functionThatReallyCallsAjax()
{
//there are probably many scenarios but by having this extra function,
//you can perform any processing you might need before the call
doAjaxThing("serverFile.php",dealWithResponse,ohNo);
}
一种情况可能是您需要将变量传递给之前没有的PHP。在这种情况下,呼叫将变为:
doAjaxThing("serverFile.php?parameter1=dogsRock",dealWithResponse,ohNo);
现在不仅你有PHP向JS发送东西,你也有JS发送给PHP。 Weeeee ...
最后的话:ajax不是一种语言,它是一种javascript'技巧'。您不需要完全理解第一个“doAjaxThing”函数使用它的功能,只需确保正确调用它。一旦来自服务器的响应到达,它将自动“调用”'deal WithResponse'功能。请注意,您可以继续开展业务(异步 - 进程没有时间限制),直到响应到达 - 这是'deal WithResponse'被触发 - 而不是有一个页面停止和等待(同步 - 时间绑定),直到回应到了。这是ajax(Asynchronous JAvascript和Xml)的神奇之处。
在你的情况下,你想添加回声(“成功”) - 或错误! - 在PHP中,以便函数'dealWithResponse'知道根据该信息做什么。
这就是我对ajax的了解。希望这会有所帮助:)