如何:PHP $_POST 变量到 AJAX $.ajax post 调用 JS?
How to: PHP $_POST vars to AJAX $.ajax post call on a JS?
好吧,这看起来有点令人困惑,但接下来的想法是:
正常 PHP 页面接收 POST 调用,并考虑这些变量以某种或其他方式起作用。没问题,正常。
此页面中加载的某些方面(从数据库获取一些大数据的信息块)独立于 POST vars 和其他内容,需要很长时间才能加载,所以我决定动态加载它们,而不是在加载页面时加载所有内容。这意味着在开始页面中渲染并花费了很长时间,现在,它渲染速度很快并显示一些带有旋转图标的“正在加载...”块。这些块基本上是通过 POST 调用一次 $(document).ready(); 的“$.ajax”。好的?这里也没有探测。一切都好。
现在的问题是: 其中一些块根据 $_POST 收到的变量显示一个或其他信息。一旦这不是 AJAX,一切正常。但是现在,从服务器接收到的处理页面(已经使用了 POST 变量)到客户端,对特定脚本进行了新的 post 调用,而这些脚本没有 PHP POST 需要变量。
显然你可以说做类似的事情:
$.ajax{
...
data: <?php ..............?>
...
}
但我不能,因为这是一个 JS 文件,none PHP 上面嵌入了 JS。
所以问题是:
我能做什么?
对于这个特定的解决方案,哪个是一个好的实施?
这不是设计错误,因为如果不使用 ajax,它也能很好地工作。这不是以前的 ajax 呼叫,可以根据请求呼叫进行。它基本上是在服务时间动态加载一些页面部分!
那又怎样?
非常感谢大家,希望大家能帮帮我!
PS:我想出了一个主意,基本上,在加载主 JS 文件之前,创建一个基本转换的小片段$_POST 数组到一个包含所有条形的 JS 对象。但即使它很有用而且可能很棒,我想它基本上会大大破坏安全性和混淆性!
有很多选择。正如您提到的,您可以通过内联 js 或 dsata 属性将数据传递给客户端,然后 post 在 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" 文件。
- 在 header 上,将 更改为 require_once ".../js/main.php"
现在你有了 header 上的所有代码块,但不知何故我猜它完全一样?
- 现在我可以将 PHP 代码放在“"JS"””主文件中。现在我可以做类似的事情:
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 ) {
...
就是这样!
我首先在 JS 中为每个使用转发 POST 数据概念的视图创建了一个 object。但它是 "unmaintainable".
然后我认为在 main.js 包含在 header 之后创建一个 JS 片段可能会很好 "object creation POST data",因为所有调用都将在 $ 上进行(文档).ready();时间,所以确保它可以访问。你知道:如果它存在,如果不存在,就使用它......等等!
但是我认为没必要一直在JS中创建一个POST object,只要有时候可能大数据会在server-side ,所以不想放到client上去。你把这个 "post" 东西交给了 object,随着时间的推移,你忘记了这个并开始把东西放在 POST no-one 应该看到并且碰巧你有它们在 JS 上绝对可见!
因此,在重用信息仅在服务器端,但我以某种方式找到了它... "tedious to mantain" 也是。
所以我终于想出了这个主意。由于这只发生在加载时间 AJAX 加载的块上,因此此 JS 数据将在非常具体的情况下发生,并且参数将非常小。我想没什么好担心的。
所以我想到了问题:
- 喜欢吗?是一个很好的实现还是您认为它是使用 "session" 东西的更好方法?
- 安全受到威胁?
- 用 src="..." 在 head 上添加一个脚本,这样动态地将 JS 文件添加到网页,在时间和使用的资源方面是相同的,将代码直接添加到 head 标签(发生在你为包含动态化 JS 代码的 PHP 文件做了 require_once?
好吧,这看起来有点令人困惑,但接下来的想法是:
正常 PHP 页面接收 POST 调用,并考虑这些变量以某种或其他方式起作用。没问题,正常。
此页面中加载的某些方面(从数据库获取一些大数据的信息块)独立于 POST vars 和其他内容,需要很长时间才能加载,所以我决定动态加载它们,而不是在加载页面时加载所有内容。这意味着在开始页面中渲染并花费了很长时间,现在,它渲染速度很快并显示一些带有旋转图标的“正在加载...”块。这些块基本上是通过 POST 调用一次 $(document).ready(); 的“$.ajax”。好的?这里也没有探测。一切都好。
现在的问题是: 其中一些块根据 $_POST 收到的变量显示一个或其他信息。一旦这不是 AJAX,一切正常。但是现在,从服务器接收到的处理页面(已经使用了 POST 变量)到客户端,对特定脚本进行了新的 post 调用,而这些脚本没有 PHP POST 需要变量。 显然你可以说做类似的事情:
$.ajax{
...
data: <?php ..............?>
...
}
但我不能,因为这是一个 JS 文件,none PHP 上面嵌入了 JS。
所以问题是:
我能做什么? 对于这个特定的解决方案,哪个是一个好的实施?
这不是设计错误,因为如果不使用 ajax,它也能很好地工作。这不是以前的 ajax 呼叫,可以根据请求呼叫进行。它基本上是在服务时间动态加载一些页面部分!
那又怎样?
非常感谢大家,希望大家能帮帮我!
PS:我想出了一个主意,基本上,在加载主 JS 文件之前,创建一个基本转换的小片段$_POST 数组到一个包含所有条形的 JS 对象。但即使它很有用而且可能很棒,我想它基本上会大大破坏安全性和混淆性!
有很多选择。正如您提到的,您可以通过内联 js 或 dsata 属性将数据传递给客户端,然后 post 在 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" 文件。
- 在 header 上,将 更改为 require_once ".../js/main.php" 现在你有了 header 上的所有代码块,但不知何故我猜它完全一样?
- 现在我可以将 PHP 代码放在“"JS"””主文件中。现在我可以做类似的事情:
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 ) {
...
就是这样!
我首先在 JS 中为每个使用转发 POST 数据概念的视图创建了一个 object。但它是 "unmaintainable".
然后我认为在 main.js 包含在 header 之后创建一个 JS 片段可能会很好 "object creation POST data",因为所有调用都将在 $ 上进行(文档).ready();时间,所以确保它可以访问。你知道:如果它存在,如果不存在,就使用它......等等!
但是我认为没必要一直在JS中创建一个POST object,只要有时候可能大数据会在server-side ,所以不想放到client上去。你把这个 "post" 东西交给了 object,随着时间的推移,你忘记了这个并开始把东西放在 POST no-one 应该看到并且碰巧你有它们在 JS 上绝对可见!
因此,在重用信息仅在服务器端,但我以某种方式找到了它... "tedious to mantain" 也是。
所以我终于想出了这个主意。由于这只发生在加载时间 AJAX 加载的块上,因此此 JS 数据将在非常具体的情况下发生,并且参数将非常小。我想没什么好担心的。
所以我想到了问题:
- 喜欢吗?是一个很好的实现还是您认为它是使用 "session" 东西的更好方法?
- 安全受到威胁?
- 用 src="..." 在 head 上添加一个脚本,这样动态地将 JS 文件添加到网页,在时间和使用的资源方面是相同的,将代码直接添加到 head 标签(发生在你为包含动态化 JS 代码的 PHP 文件做了 require_once?