在AJAX请求完成成功时运行PHP函数

时间:2014-03-24 23:12:49

标签: javascript php ajax

我知道在JS中,你可以使用AJAX函数的成功作为启动其他事件的触发器......

所以我刚刚使用AJAX加载了一个新页面。通过这个我也传递了一些参数,这是我通过的:

xmlhttp.open("GET","register-form.php?one="+wordChoiceOne+"&two="+wordChoiceTwo+"&three="+wordChoiceThree,true);

所以我现在在PHP中有变量$one, $two, $three

我希望在输出到页面之前使用这些任务完成一些任务(连接,大写,分配等)。但是我不希望这一点受到按钮或任何东西的限制,我希望它能够被加载AJAX的成功绑定。

我现在如何在PHP中启动这些操作?

伪代码

function setUsername() // RUN ON AJAX SUCCESS{
     // capitalise first letter of one two and three
     // concatenate together
     // Store in variable $username
}

然后ECHO USERNAME OUT

ETA。我已经编写了AJAX请求,它工作正常。现在它被加载了,我想执行这个PHP函数,将该函数的触发器绑定到AJAX加载的成功:

<?php

$_GET['one'], $_GET['two'] and $_GET['three'];

// Capitalise first letter
$one = ucfirst($one); 
$two = ucfirst($two); 
$three = ucfirst($three); 

$username = $one . $two . $three;

?>

编辑:好的,看起来我无法解释自己,或者我还没有理解这项功能需要什么。但是我需要用简单的英语和链接来实现这一点。

我正在建立一个注册系统。我有一个用户名构建器,而不是让人们输入自己的用户名。你可以在这里看到: http://marmiteontoast.co.uk/fyp/login-register/register-username-builder.php

Javascript中的第一步

将瓷砖拖动到框中,点击显示的按钮。如果你有三个,你就会点击绿色的大按钮。到目前为止,我们都在jQuery中,并且存储了以下三个变量:

wordChoiceOne - 您选择的第一个单词 wordChoiceTwo - 您选择的第二个字 wordChoiceThree - 您选择的第三个字词

这些存储为JS变量。

第二步PHP时间

所以现在我有这三个存储的变量,我希望摆脱JS并开始使用PHP。我已经建立了一个成功的工作注册,但它使用username作为输入,而不是在帮助你构建&#34;你自己的。

我的研究表明,由于客户端到服务器端的切换,我能成功将这些变量传递给PHP的唯一方法是通过AJAX请求。这对我来说非常方便,因为我希望我已经构建的注册表单异步加载到页面中。所以我就如何分享&#34;分享了一些建议。这些jQuery值通过AJAX请求得到了以下帮助,以便通过URL传递它们:

xmlhttp.open("GET","register-form.php?one="+wordChoiceOne+"&two="+wordChoiceTwo+"&three="+wordChoiceThree,true);

我的理解(也许我错了?请让我知道并解释我是不是......)这是将wordChoiceTwo等已经存在的变量分配给$ 2的PHP变量。这是正确的吗?

所以现在我有PHP变量$ 1,$ 2和$ 3 ......

运行PHP

也许这是因为我更习惯使用JS,但是使用JS,你必须做一些事情(按钮点击等)以便能够实现一个功能。我知道其中一个做某事是一个成功的AJAXC请求,但那不是PHP。所以我的问题......这是我唯一的问题,是**当你刚刚通过AJAX加载某些东西时,你如何开始运行PHP函数?**我想开始运行一个php函数叫做`setUsername&#34;在本页面。但我不希望用户必须按下按钮才能启动,我希望它能够与AJAX完成的成功相关或类似的内容,我理解这可能只是JS。

这是我已有的AJAX调用:

function saveUsername(wordChoiceOne, wordChoiceTwo, wordChoiceThree){

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("login-register-wrapper").innerHTML=xmlhttp.responseText;
    }
  }


xmlhttp.open("GET","register-form.php?one="+wordChoiceOne+"&two="+wordChoiceTwo+"&three="+wordChoiceThree,true);
xmlhttp.send();
}

1 个答案:

答案 0 :(得分:1)

添加json标头类型和echo

$_GET['one'], $_GET['two'] and $_GET['three'];

// Capitalise first letter
$one = ucfirst($one); 
$two = ucfirst($two); 
$three = ucfirst($three); 

$username = $one . $two . $three;
header('Content-type: application/json');
echo json_encode(array('username'=>$username)); // <---

然后在你的js中,将一个函数绑定到调用成功:

xmlhttp.onreadystatechange=function() {
   if (xmlhttp.readyState==4 && xmlhttp.status==200) {
     //xmlhttp.responseText;
   }
 }

编辑,因为似乎有些混乱:

仅仅因为ajax调用到达你的php脚本并不意味着它被执行。本质上的请求将等待回复。如果你的php回复它,这个回复可以包含数据。

编辑2 所以你可以围绕它的原则,这里过分简化了我的想法:

文件'ajax.html':

<div id="name"></div>
<script>
    function myName(first, last) {
        var req = new XMLHttpRequest();
        req.open('GET', 'ajax.php?first='+first+'&last='+last);

        req.onreadystatechange = function() {
            if(req.readyState==4 && req.status==200) {
                data = JSON.parse(req.responseText);
                document.getElementById('name').innerHTML = data.username;
            }
        }
        req.send();
    }
    myName('john', 'doe')
</script>

文件'ajax.php':

$first = $_GET['first'];
$last = $_GET['last'];
header('Content-type: application/json');
echo json_encode(array('username'=>ucwords($first) . ' ' . ucwords($last)));

这通常是如何使用AJAX的