我怎样才能运行PHP函数JavaScript的AJAX请求? [英] How can I run a JavaScript AJAX request from a PHP function?

查看:136
本文介绍了我怎样才能运行PHP函数JavaScript的AJAX请求?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆