使用AJAX通过JavaScript函数执行PHP脚本

时间:2016-02-25 23:10:29

标签: javascript php jquery ajax

我有一个没有目的地的锚链接,但确实有一个$ 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(); } } }

5 个答案:

答案 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调用,您需要:

  1. 要拨打的文件
  2. 如何处理来自您调用的文件的响应
  3. 如果发生I / O错误,该怎么办
  4. 所以我们有这个功能 - 不是我的,从成千上万的地方汲取 - 可能在这里:) - 也许众所周知,我向作者道歉,他是一个天才:这就是你所谓的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的了解。希望这会有所帮助:)