Javascript 如何:PHP$\u将变量POST到AJAX$。在JS上进行AJAX POST调用?

Javascript 如何:PHP$\u将变量POST到AJAX$。在JS上进行AJAX POST调用?,javascript,php,jquery,ajax,post,Javascript,Php,Jquery,Ajax,Post,好吧,这看起来有点混乱,但接下来的想法是: 接收POST调用的普通PHP页面,并考虑到这些变量以某种或其他方式进行操作。没问题,正常的事情 这个页面中加载的一些方面(从数据库中获取一些大数据的信息块),独立于POST VAR等等,需要很长时间才能加载,所以我决定动态加载它们,而不是在加载页面时加载所有内容。这意味着,在开始的页面中,它正在呈现,并且花费了很长时间,现在,它呈现FAST,并显示一些带有旋转图标的“加载…”块。这些块基本上是通过POST的“$.ajax”调用,一旦$(documen

好吧,这看起来有点混乱,但接下来的想法是:

  • 接收POST调用的普通PHP页面,并考虑到这些变量以某种或其他方式进行操作。没问题,正常的事情

  • 这个页面中加载的一些方面(从数据库中获取一些大数据的信息块),独立于POST VAR等等,需要很长时间才能加载,所以我决定动态加载它们,而不是在加载页面时加载所有内容。这意味着,在开始的页面中,它正在呈现,并且花费了很长时间,现在,它呈现FAST,并显示一些带有旋转图标的“加载…”块。这些块基本上是通过POST的“$.ajax”调用,一旦$(document).ready();。好啊这里也没有探头。好的

  • 现在的问题是:这些块中的一些块显示了与$\u POST received vars相应的一个或其他信息。一旦这不是AJAX,一切都正常。但是现在,从服务器接收到的处理页面(已经使用POST变量)发送到客户端,对特定脚本进行新的POST调用,而这些脚本没有PHP POST所需的变量。 很明显,你可以说做一些事情,比如:

  • $.ajax{
    ...
    数据:
    ...
    }
    
    但我不能,因为这是一个JS文件,没有一个PHP上嵌入了JS

    因此,问题是:

    我能做什么? 对于这个特定的解决方案,哪一个是好的实现

    这不是设计上的错误,因为如果不使用ajax,它的效果会很好。这不是可以根据请求调用的前一个ajax调用。它基本上是在服务时间动态加载一些页面部件

    那又怎样

    非常感谢大家,希望你们能帮助我


    PS:我想出了一个主意,基本上,在加载主JS文件之前,创建一个小片段,基本上将$\u POST数组转换为包含所有条的JS对象。但是,即使它很有用,可能也很棒,我想它基本上会破坏安全性和模糊性很多

    有很多选择。正如您所提到的,您可以通过内联js或dsata属性将数据传递给客户机,然后在ajax调用中发回数据

    这可以很好地工作,但是如果您有安全问题,那么替代方法是持久化数据服务器端,并更改php脚本检索方法:

    //main.php - the file that initially loads:
    session_start();
    $_SESSION['post']=$_POST;
    //rest of script
    
    //sidebar.php - the file called by ajax
    session_start();
    if(!$_POST){
        if(isset($_SESSION['post']){
            $_POST = $_SESSION['post'];
        }
    }
    //rest of script
    

    这就是我最终得出的结论:

    • 将“main.js”文件更改为“main.php”文件
    • 在标题上,将更改为“只需要一次”../js/main.php” 现在你们在头上有了所有的代码块,但不知怎的,我猜它是完全一样的
    • 现在我可以将PHP代码放在“JS”主文件上。现在我可以做一些类似的事情:

    var数据=[];
    //控制参数,我肯定会有,而且总是会手动添加。
    push({name:“ajax”,value:action})//添加更多参数。。。
    push({name:“section”,value:section});
    //这些“其他”POST参数可能因请求调用而异。
    data.push({name:,value:});
    ...
    $.ajax({
    类型:“POST”,
    url:“?a=“+操作,
    //数据:{ajax:action,section:section},
    数据:$.param(数据),
    超时:最多8000//8秒。
    }).完成(功能(数据){
    ...
    
    就这样

    我已经开始在JS中为每个视图创建一个对象,该视图使用了转发POST数据的概念,但它是“不可维护的”

    然后我想,在main.JS包含在标题上之后,用这个“object creation POST data”创建一个JS snipet可能会很好,因为所有调用都将在$(document).ready();时间上进行,所以确保它可以访问。你知道:如果它存在,就使用它,如果没有…等等

    但是,我认为不必一直在JS中创建POST对象,只要有时大数据可能会在服务器端,所以不想将其放在客户端。您可以发送此“POST”随着时间的推移,你忘记了这一点,开始把没有人应该看到的东西放在帖子上,碰巧你在JS上完全可以看到它们

    因此,您建议的选项(通过会话数组上的“POST”变量或通过ID筛选来对帖子进行会话)似乎是这种仅在服务器端重用信息的想法中最安全的,但我发现它不知何故…“对mantain来说太乏味了”

    所以我终于想到了这个想法。由于这只发生在加载时AJAX加载的块上,所以JS数据将发生在非常具体的情况下,参数将非常小。我想没什么好担心的

    于是我想到了一些问题:

  • 您喜欢它吗?是一个很好的实现还是您认为它是使用“会话”的更好方法
  • 安全妥协
  • 使用src=“…”在head上添加脚本,因此直接将JS文件添加到网页,在时间和使用的资源方面是相同的,以便将代码直接添加到head标记(当您对包含dinamized JS代码的PHP文件执行一次require_时会发生这种情况)

  • 您在“PS”中的想法已经走上了正确的轨道,您需要使POST数据可用于ajax调用对于真实的数据,您可能希望保存会话数据并只发送某种令牌/密钥。通过使用该令牌,您可以在ajax调用期间重新创建会话数据。嗨,Paul,您和Steve在这里同意会话存储的内容。您说“在ajax调用期间重新创建会话数据”,我理解您的意思是在AJAX调用的PHP脚本上使用存储的post-to会话数据,是吗?嗨!谢谢。您的解决方案好吗?因为我喜欢它,但我不知道它是否“冗余”…只要在使用存储到会话中的post数据后,它将占据整个脚本的主导地位…我不太喜欢它,因为它只在特定屏幕上有用…@Lightworker我不知道
    //main.php - the file that initially loads:
    session_start();
    $_SESSION['post']=$_POST;
    //rest of script
    
    //sidebar.php - the file called by ajax
    session_start();
    if(!$_POST){
        if(isset($_SESSION['post']){
            $_POST = $_SESSION['post'];
        }
    }
    //rest of script
    
    var data = [];
    //Controlled parameters which sure I'll have and always will add manually.
    data.push({ name: "ajax", value: action }); //add more parameters...
    data.push({ name: "section", value: section });
    
    //Those "others" POST parameters which can vary depending on the request call.
    <?php foreach ($_POST as $k=>$v){ ?>
        data.push({ name: "<?php echo $k;?>", value: "<?php echo $v;?>" });
    <?php } ?>
    
    ...
    
    $.ajax({
        type: "POST",
        url: "?a="+action,
        //data: { ajax: action, section: section },
        data: $.param(data),
        timeout: 8000 //8 seconds max.
    }).done(function( data ) {
    
    ...