![](/img/trans.png)
[英]Javascript /jQuery: How can I make this AJAX request run faster?
[英]How can I run a JavaScript AJAX request from a PHP function?
目前,我的PHP if statement
成功重新加载了页面:
header('Location: index.php');
添加:链接到此处的网站http://marmiteontoast.co.uk/fyp/login-register/index.php
但是我想运行JavaScript基本的AJAX请求,而不是将页面register-success.php
加载到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();}
但是我不确定JavaScript和PHP的组合以及如何实现它
1)是否有某种PHP函数可以包裹一段JS以使其生效?
2)有没有办法在PHP中像这样进行简单的AJAX调用? 还是模仿的东西?
这是验证我的表格的功能。 如果表单通过验证,则需要重新加载AJAX并调用register-success
文件
<?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
}
?>
您需要在PHP Block外部编写javascript代码,所以在?>之后。 Ajax调用是从客户端进行的,因此只能使用javascript。
为了简化代码,您可以使用jQuery之类的javascript库,因此代码更简单:
$('#login-register-wrapper').load('register-success.php');
您可以使用ob_get_contents()将PHP像Kamehameha Answer一样实现。
在这种情况下,如果没有来自html页面的参数,则结果是相同的,所处理的内容也是如此。
编辑:
基于注释,您需要使用一些参数重定向到“ index.php”,例如:
header('Location: index.php?success=1');
因此,在index.php中,您可以编写如下代码:
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>';
}
编辑:
在代码主体中,您需要调用javascript函数loadSuccess()。 像这样:
<body onload="loadSuccess()">
您只需要创建一个额外的.php文件,其中仅包含register-logic。 假设您有一个包含所有数据的表单,然后您将使用javascript创建一个提交按钮,并使用ajax请求将所有数据(例如,通过get或post)发送到服务器上的此.php文件。 答案只会是您要包含在包装中的html。 然后,只需修改当前站点的dom,即可显示服务器的此响应
真的很简单! 请执行下列操作 :
回声“ document.getElementById('success')。click();”;
<a id="success" style="visibility:hidden;">Success</a> <script> var el = document.getElementById('success'); el.onclick = loadSuccess(); </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.