Ajax和PHP:是否可以在一次提交中执行Javascript、Ajax函数和PHP帖子?

Ajax和PHP:是否可以在一次提交中执行Javascript、Ajax函数和PHP帖子?,javascript,php,ajax,database,post,Javascript,Php,Ajax,Database,Post,如果这是可能的,为什么它不起作用? 这是太多的代码,我只会放伪代码,不会告诉我这是一个语法错误,因为所有元素都是独立工作的,问题是当它们集成在一起时 我有: 设立: 1) -具有各种输入和单个提交按钮的html表单。像这样: <form action="" method="POST"> <input type="submit"></input> </form> 5) -一个伪造的php页面,其中收集Ajax查询的GET结果并将其传递到数据

如果这是可能的,为什么它不起作用? 这是太多的代码,我只会放伪代码,不会告诉我这是一个语法错误,因为所有元素都是独立工作的,问题是当它们集成在一起时

我有:

设立:

1) -具有各种输入和单个提交按钮的html表单。像这样:

<form action="" method="POST">
    <input type="submit"></input>
</form>
5) -一个伪造的php页面,其中收集Ajax查询的GET结果并将其传递到数据库。这很有效

工作原理:

如果我将javascript函数加载到body
body onload=“js_function()”
上,并在“提交”按钮上加载Ajax函数
onclick=“loadXMLDoc()”
,那么一切都可以无缝工作,没有问题。所以,这不是语法问题,请在回答之前仔细阅读

似乎不可能的事情:

1) -我需要在一篇文章中同时执行Javascript函数和Ajax函数,或者

2) -将Javascript移动到按钮的
onclick
事件,让Ajax函数等待Javascript函数执行,并在完成后自动对数据库执行
POST
GET

我不知道如何做到这两个。我已经尝试了3天,虽然每一个片段都可以单独工作或加载到主体中,但在提交时加入它们会导致第一个Javascript函数执行得太快,因此Ajax调用返回空,我得到一个PHP未定义变量错误。但是,如果我在主体中首先执行Javascript,则不会发生这种情况


但我有一个要求,让这一切发生在一个单一的提交。如何完成此操作?

编写一个传递回调的函数:

    function taskThatTakesSometime(callback){
        // Do stuff here that takes time
        alert("Do some intense stuff");
        alert("Do some more stuff");
        // when done call the callback
        callback();
    }

    function ajax(){
        //do your ajaxrequest here
        alert("calling ajax");
    }

    // Call your intense task and configure the
    // callback for calling ajax when done
    taskThatTakesSometime(function(){
        ajax();
    });


您还应该过度考虑在body元素上使用onload的设计。

从我以前遇到的这个问题来看,我这样做的方法是在javascript中设置一个全局变量,然后在表单提交时根据之前设置的变量使用return false阻止表单,然后,我执行我需要的任何代码,重置变量并重新提交表单,而表单不会执行实际的提交操作。下面是一个简单的例子:

<form onsubmit="doAction(this);">
    <input type="submit">
</form>

Javascript:

<script>
    var preventFormSubmit = true;
    function doAction(this){
        if (preventFormSubmit) {
            preventFormSubmit = false;
            // Do Whatever stuff you need, this time the form won't submit
            this.submit(); // Usually I would put this in ajax's success reponse function
            return false;
        } // else do nothing, submit the form as usual
    }
</script>

var-preventFormSubmit=true;
函数doAction(this){
如果(提交){
preventFormSubmit=false;
//做任何你需要的事情,这次表格不会提交
this.submit();//通常我会将其放入ajax的成功响应函数中
返回false;
}//否则什么也不做,照常提交表格
}

我对javascript有点生疏,因为我主要编写jquery,但你应该明白这一点的要点。

我不明白你在问什么?AJAX是用来弥合客户机和服务器之间的鸿沟的。又名Javascript、HTML和PHP。所以,你想用Javascript做什么,因为这是一个非常模糊的伪代码。我需要在提交时发布Javascript函数的结果。也就是说,让Javascript在单击时运行测试,让Ajax收集结果并将其发布到数据库。这并没有发生,因为Javascript函数需要时间来生成结果。我需要在Javascript工作时保持Ajax的执行,并在完成后触发它。但这不会再次点击。我不知道如何实现这一点。你是说,调用javascript onclick并在javascript函数中实现Ajax调用?如果是,这就是我正在做的。但它不起作用。Ajax执行得太快了。javascript函数需要大约8秒钟才能完成。理想情况下,有没有办法延迟Ajax调用?对函数使用回调,调用Ajax请求。我不明白他在回答这个问题时在做什么。我有:Ajax(){//Ajax code}js_function(){//js code;Ajax()}好的,约翰尼,我解决这个问题的方法是使用回调,但我必须创建另一个带有计时器的函数,并完全摆脱PHP帖子。因此,我的计时器函数在激活onclick的其他两个函数完成后设置提交。
    function taskThatTakesSometime(callback){
        // Do stuff here that takes time
        alert("Do some intense stuff");
        alert("Do some more stuff");
        // when done call the callback
        callback();
    }

    function ajax(){
        //do your ajaxrequest here
        alert("calling ajax");
    }

    // Call your intense task and configure the
    // callback for calling ajax when done
    taskThatTakesSometime(function(){
        ajax();
    });
<form onsubmit="doAction(this);">
    <input type="submit">
</form>
<script>
    var preventFormSubmit = true;
    function doAction(this){
        if (preventFormSubmit) {
            preventFormSubmit = false;
            // Do Whatever stuff you need, this time the form won't submit
            this.submit(); // Usually I would put this in ajax's success reponse function
            return false;
        } // else do nothing, submit the form as usual
    }
</script>