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
$.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数据将发生在非常具体的情况下,参数将非常小。我想没什么好担心的
于是我想到了一些问题:
您在“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 ) {
...