我怎样才能运行PHP函数JavaScript的AJAX请求? [英] How can I run a JavaScript AJAX request from a PHP function?
问题描述
我的PHP目前成功的 if语句
只是重新加载页面:
标题(位置:的index.php);
补充:链接到该网站在这里 http://marmiteontoast.co.uk /fyp/login-register/index.php
不过,我想运行一个基本的JavaScript Ajax请求,而不是加载一个页面注册-success.php
进的div:
函数loadSuccess()
{VAR XMLHTTP;
如果(window.XMLHtt prequest)
{XMLHTTP =新XMLHtt prequest();}
其他
{XMLHTTP =新的ActiveXObject(Microsoft.XMLHTTP);}
xmlhttp.onreadystatechange =功能()
{如果(xmlhttp.readyState == 4和&安培; xmlhttp.status == 200)
{的document.getElementById(登录注册 - 包装)的innerHTML = xmlhttp.responseText;}}
xmlhttp.open(GET,注册 - success.php,真正的);
xmlhttp.send();}
不过,我不确定的JavaScript和PHP和这个组合如何实现它
1)是否有某种形式的PHP函数,我可以围绕一块JS的包装,使之制定呢?
2)有没有办法做一个简单的AJAX调用像这样在PHP中呢?或者一些模仿呢?
下面是验证我的表单功能。如果表单验证,我需要重新加载与AJAX和调用注册-成功
文件
< PHP
在session_start();
需要'的functions.php;
如果(使用isset($ _ POST ['签名行动'])){
//用户名
如果(使用isset($ _ POST ['用户名'])){
$用户名= mysql_real_escape_string(修剪($ _ POST ['用户名']));
$ _SESSION ['状态'] ['注册'] ['用户名'] = $的用户名;
如果(strlen的($用户名)→3){
如果(strlen的($用户名)< 31){
如果(user_exists($用户名)===真){
$ _SESSION ['状态'] ['注册'] ['错误'] [] ='这个用户名已被使用。对不起,请重试使用不同的用户名。
} 其他{
//传递
// 继续
}
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] ='用户名超过30个字符。;
}
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] ='用户名少于3个字符。;
}
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] ='用户名不进。;
}
如果(使用isset($ _ POST ['密码'])){
$密码= mysql_real_escape_string(修剪($ _ POST ['密码']));
如果(strlen的($密码)> = 8){
$密码= hash_function($密码);
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] =你的秘密密码太短你应该做一个密码至少包含8个字母。
}
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] =你不能把一个密码。
}
// 电子邮件地址
如果(!空($ _ POST ['EMAIL_ADDRESS'])){
$ EMAIL_ADDRESS = mysql_real_escape_string(修剪($ _ POST ['EMAIL_ADDRESS']));
$ _SESSION ['状态'] ['注册'] ['EMAIL_ADDRESS'] = $ EMAIL_ADDRESS;
如果(strlen的($ EMAIL_ADDRESS)→10){//电子邮件地址小于10
如果(strlen的($ EMAIL_ADDRESS)< 161){//如果超过160个
如果(email_valid($ EMAIL_ADDRESS)== FALSE){//电子邮件地址格式无效
$ _SESSION ['状态'] ['注册'] ['错误'] [] =电子邮件地址已经放在错误的。请检查并再试一次。
}
其他{
//通过最小长度,通过最大长度,通过验证
// 继续
}
}
其他
{
$ _SESSION ['状态'] ['注册'] ['错误'] [] ='电子邮件地址太长。;
}
}
其他
{
$ _SESSION ['状态'] ['注册'] ['错误'] [] =电子邮件地址太短,不能超过10个字母更短。
}
}
其他{//传递(没有电子邮件输入)
}
如果(使用isset($ _ POST ['条款'])){
$ _SESSION ['状态'] ['注册'] ['TOS'] = $ _ POST ['条款'];
如果(空($ _ SESSION ['状态'] ['注册'] ['错误'])){
如果(寄存器($ EMAIL_ADDRESS,$的用户名,密码$)===真){
// 成功!!
$ _SESSION ['状态'] ['注册'] ['成功'] =真;
//发送电子邮件
SEND_EMAIL($ EMAIL_ADDRESS);
} 其他 {
回声mysql_error();
死();
$ _SESSION ['状态'] ['注册'] ['错误'] [] =出事了,我们很抱歉,请重试。;
}
} 其他 {}
} 其他 {
$ _SESSION ['状态'] ['注册'] ['错误'] [] =您必须同意众议院规则才能够注册。
}
标题(位置:的index.php);
} 其他 {
//成功脚本AJAX放在这里
}
?>
您需要编写PHP阻止外部的JavaScript code,打完?>。 Ajax调用是由客户方提出,所以只用JavaScript。
要简化你的code,就可以使用JavaScript的lib,像jQuery,因此code是更简单:
$('#登录注册 - 包装)的负载('寄存器success.php)。
您可以做这个用PHP一样的Kamehameha答案,使用ob_get_contents()。
在这种情况下,不脱离html页面参数,结果是一样的,从处理。内容
编辑:
总部设在评论,你需要重定向到'的index.php'一些参数,如:
标题(位置:的index.php成功= 1');
所以,在index.php文件,你可以写一些像这样的:
如果(使用isset($ _ GET ['成功'])及和放大器; $ _GET ['成功'] == 1){
回声'<脚本>功能loadSuccess()
{VAR XMLHTTP;
如果(window.XMLHtt prequest)
{XMLHTTP =新XMLHtt prequest();}
其他
{XMLHTTP =新的ActiveXObject(Microsoft.XMLHTTP);}
xmlhttp.onreadystatechange =功能()
{如果(xmlhttp.readyState == 4和&安培; xmlhttp.status == 200)
{的document.getElementById(登录注册 - 包装)的innerHTML = xmlhttp.responseText;}}
xmlhttp.open(GET,注册 - success.php,真正的);
xmlhttp.send();}&所述; /脚本>';
}
编辑:
在标签体,需要调用javascript函数loadSuccess()。像这样的:
<身体的onload =loadSuccess()>
Currently the success of my PHP if statement
just reloads the page:
header('Location: index.php');
Added: link to the site here http://marmiteontoast.co.uk/fyp/login-register/index.php
However I want to run a JavaScript basic AJAX request instead to load a page register-success.php
into the div:
function loadSuccess()
{var xmlhttp;
if (window.XMLHttpRequest)
{xmlhttp=new XMLHttpRequest();}
else
{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-success.php",true);
xmlhttp.send();}
However I am unsure about this combination of JavaScript and PHP and how to implement it
1) Is there some sort of PHP function I can wrap around a piece of JS to make it enact it?
2) Is there a way to do a simple AJAX call like this in PHP instead? Or something that mimics it?
Here is the function that validates my form. If the form validates, I need to reload with AJAX and call in register-success
file
<?php
session_start();
require 'functions.php';
if(isset($_POST['sign-up'])){
// username
if (isset($_POST['username'])){
$username = mysql_real_escape_string(trim($_POST['username']));
$_SESSION['status']['register']['username'] = $username;
if(strlen($username) > 3){
if(strlen($username) < 31){
if(user_exists($username) === true){
$_SESSION['status']['register']['error'][] = 'That username is already taken. Sorry, please try again with a different username.';
} else{
// passed
// continue
}
} else {
$_SESSION['status']['register']['error'][] = 'The username is greater than 30 characters.';
}
} else {
$_SESSION['status']['register']['error'][] = 'The username is less than 3 characters.';
}
} else {
$_SESSION['status']['register']['error'][] = 'The username is not entered.';
}
if (isset($_POST['password'])){
$password = mysql_real_escape_string(trim($_POST['password']));
if(strlen($password) >= 8){
$password = hash_function($password);
} else {
$_SESSION['status']['register']['error'][] = "Your secret password is too short. You should make a password with at least 8 letters.";
}
} else {
$_SESSION['status']['register']['error'][] = "You haven't put in a password.";
}
// Email address
if (!empty($_POST['email_address'])){
$email_address = mysql_real_escape_string(trim($_POST['email_address']));
$_SESSION['status']['register']['email_address'] = $email_address;
if(strlen($email_address) > 10){ // email address less than 10
if(strlen($email_address) < 161){ // if longer than 160
if(email_valid($email_address) == false){ // email address invalid format
$_SESSION['status']['register']['error'][] = "The email address has been put in wrong. Please check and try again.";
}
else{
// passed min length, passed max length, passed validation
// Continue
}
}
else
{
$_SESSION['status']['register']['error'][] = 'The email address is too long.';
}
}
else
{
$_SESSION['status']['register']['error'][] = "The email address is too short. It can't be shorter than 10 letters.";
}
}
else{// passed (no email input)
}
if (isset($_POST['tos'])){
$_SESSION['status']['register']['tos'] = $_POST['tos'];
if(empty($_SESSION['status']['register']['error'])){
if(register($email_address, $username, $password) === true){
// Success!!
$_SESSION['status']['register']['success'] = true;
// Sends an email
send_email($email_address);
} else {
echo mysql_error();
die();
$_SESSION['status']['register']['error'][] = "Something went wrong. We're sorry. Please try again.";
}
} else {}
} else {
$_SESSION['status']['register']['error'][] = "You have to agree to the House Rules to be able to sign up.";
}
header('Location: index.php');
} else {
// success script with AJAX goes here
}
?>
You need to write javascript code outside PHP Block, so after ?>. Ajax call are made from client side, so only with javascript.
To simplify your code, you can use a javascript lib, like jQuery, so the code is more simple:
$('#login-register-wrapper').load('register-success.php');
You can made this with PHP like Kamehameha Answer, using ob_get_contents().
In this case, without parameters from html page, the result is the same, the content from processed.
Edit:
Based in comments, you need to redirect to 'index.php' with some parameter, like:
header('Location: index.php?success=1');
So, in index.php, you can write some like this:
if (isset($_GET['success']) && $_GET['success'] == 1) {
echo '<script>function loadSuccess()
{var xmlhttp;
if (window.XMLHttpRequest)
{xmlhttp=new XMLHttpRequest();}
else
{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-success.php",true);
xmlhttp.send();}</script>';
}
Edit:
In tag body, you need to call javascript function loadSuccess(). Like this:
<body onload="loadSuccess()">
这篇关于我怎样才能运行PHP函数JavaScript的AJAX请求?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!