Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Ajax发送的变量在直接输入PHP文件时消失_Php_Ajax_Variables_Get - Fatal编程技术网

从Ajax发送的变量在直接输入PHP文件时消失

从Ajax发送的变量在直接输入PHP文件时消失,php,ajax,variables,get,Php,Ajax,Variables,Get,我将通过Ajax向PHP发送一个变量 当检测到密钥更新时,会触发Ajax 一旦检测到Keyup,我就从Keyup的txtbx中获取值和名称 然后,我创建一个请求,发送触发事件的文本框的值和名称 在onreadystatechange中,我启动了一个函数来验证我的Ajax是否打开,如果我的状态为200,该函数将检索我之前发送的变量的值,这些变量将通过PHP端的回音返回 一切都好,直到明天 直到我直接进入PHP页面,我从客户端发送的变量就消失了 为什么,在使用Ajax的时候,我的意思是当我捕获数据/

我将通过Ajax向PHP发送一个变量

当检测到密钥更新时,会触发Ajax

一旦检测到Keyup,我就从Keyup的txtbx中获取值和名称

然后,我创建一个请求,发送触发事件的文本框的值和名称

在onreadystatechange中,我启动了一个函数来验证我的Ajax是否打开,如果我的状态为200,该函数将检索我之前发送的变量的值,这些变量将通过PHP端的回音返回

一切都好,直到明天

直到我直接进入PHP页面,我从客户端发送的变量就消失了

为什么,在使用Ajax的时候,我的意思是当我捕获数据/发送/检索时一切都正常,但是当我直接转到PHP时,变量似乎消失了,我得到了一个非常好的注意:未定义的变量

我在这里发送的代码是西班牙语:

具有Ajax请求的客户端:

现在,服务器端:


您发送的数据变量仅存在于请求的上下文中,即-在发出请求时。从浏览器加载页面时,将在新上下文中启动页面。同样,如果进行了新的AJAX调用,则旧变量将不存在

相反,如果您确实希望直接访问该页面,您可以将所需变量放入GET中,或者通过HTML表单的POST发送它们,如下所示:


yourpath.com/procesarPedido/pruebaDeRecepcion.php?nombre=pro variable value&valor=can variable value

通过艰难地浏览评论,我发现您的问题是,为什么会话处理不起作用

如果$nombre和$valor是在$\请求中设置的,则可以将它们分配给$nombre和$valor。如果没有,它们是未定义的。但是,您可以无条件地使用$nombre和$valor,也就是说,即使在$\u会话的赋值右侧未定义它们。这会让你注意到nombre和valor未定义的级别错误

将未定义的值存储到$\u会话将删除以前存储在那里的内容

我建议您远离代码,用简单的西班牙语写下在设置了$\u请求变量的情况下,以及在没有设置的情况下,您希望发生什么。然后,您可以返回到代码并使其执行您所写的操作

如果您的总体系统设计允许,那么使用$\u POST是一种很好的做法,因为可以缓存通过URL获取的请求。此外,攻击者更容易伪造GET请求

最后,您应该考虑使用PHP的三元运算符来从超全局数组中获取项:

$nombre = isset($_POST['nombre']) ? $_POST['nombre'] : false;
这样,你可以写,如果$nombre。。。只有在POST或请求响应中存在$nombre时,才会执行if中的代码


如果你能做到同样的事情,如果。。。else但是使用三元运算符会迫使您考虑else部分,这是您原始代码中缺少的部分。

您确定在目录打开PHP页面时也会发送更正的get参数吗?你检查过参数情况吗?我,get参数已经在Ajax的时候发送了,PHP在$_SESSION['orden']=array中负责存储所述变量;但没什么,谢谢你给我时间。看,这有点奇怪,因为当我使用下面的代码时,它可以工作,即使使用触发Ajax的相同Js,我的意思是存储变量;如果isset$请求['nombre']{$nomb=$请求['nombre']}其他{$nomb=}如果isset$请求['valor']{$valo=$请求['valor'];}其他{$valo=}如果isset$会话['orden']{'orden'][$nomb]=$valo如果$valo会话['orden'],每一个$\orden']会话['orden']作为$desc=>$val{$val={['orden'][$desc];}}}继续其他{$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\{$arreglo=json_encode$_SESSION['orden'];echo$arreglo;}P.D.此处的文件已更改为orden.php,不用担心。请提供完整的php错误,以及您尝试访问的URL。您的替代代码可以工作,因为如果$nomb和$valo不是$\u请求的一部分,您将为它们赋值。您的原始代码不会这样做。嗨,bob,您非常友好,感谢您的时间。我在考虑用一个POST代替一个GET来改变变量的方式。我并没有真正考虑三元运算符的选项,但是现在它有意义,这改变了我让PHP考虑我的编码的方式,让我进入PC并尝试你告诉我的一切,如果新的事情发生,我会。
嗨,鲍勃,大家好。我去掉了代码,开始逐段替换,现在它工作正常,使用相同的JS Ajax get文件,但现在我可以在服务器端使用OOP PHP。但我遇到了一个非主要问题,会话变量存储在一个关联数组中,从Ajax发送的所有值都放在数组的最后一个位置,即空元素。?为什么会发生这种情况?我知道我可以使用一些PHP函数来过滤数组,但我想知道空的最后一个位置的来源,总是在最后一个位置。如果没有看到您的代码,我们可能无法判断。请编辑您的问题,向我们展示新的PHP。
    <?php
session_start();
if (isset($_REQUEST['nombre'])) {
        $nombre=$_REQUEST['nombre'];
    }
    if (isset($_REQUEST['valor'])) {
        $valor=$_REQUEST['valor'];
    }
    if (isset($_SESSION['orden'])) {
        $_SESSION['orden']=array();
        $_SESSION['orden'][$nombre]=$valor;
        $nuevaOrd= new nuevaOrden($_SESSION['orden']);
        $nuevaOrd->validarOrden();
    }else {
        $_SESSION['orden'][$nombre]=$valor;
        $nuevaOrd= new nuevaOrden($_SESSION['orden']);
        $nuevaOrd->validarOrden();
    }
    class nuevaOrden{
        private $arreglo;
        public function __construct($ar){
            $this->arreglo=$ar;
            $this->empujarOrden();
        }
        private function empujarOrden() {
            foreach ($_SESSION['orden'] as $nom => $val) {
                if ($val=="") {
                    unset($this->arreglo[$nom]);
                }
            }
        }
    public function validarOrden(){
        $arr=json_encode($this->arreglo);
        echo $arr;
    }
    }
    ?>
$nombre = isset($_POST['nombre']) ? $_POST['nombre'] : false;