【发布时间】:2016-07-03 10:35:34
【问题描述】:
根据定义,Ajax 是对服务器的异步请求。但这对于 PHP 文件中的变量意味着什么?
假设我们在 for 循环中有一个 Ajax 请求。每次迭代的请求都是相同的,只是输入略有不同(在本例中为 someField)。
for (var iOuter = 0; iOuter < 3; iOuter++) {
(function(i) {
myArrayVariable['someField'] = i;
$.ajax({
type: 'POST',
url: 'someurl.php',
data: myArrayVariable
})
.done(function() {
console.log("Finished " + i);
})
.fail(function(jqXHR, textStatus, error) {
console.error(error + ": " + textStatus);
});
})(iOuter);
}
那么,在 PHP 中,我们可以这样:
$val = $_POST['someField'];
$values = array();
for ($i = 0; $i < 10; $i++) {
push($values, ($val+$i));
}
我的问题是:因为它是一个异步请求,这是否意味着变量的范围在不同的请求之间是共享的?换句话说,$values 会包含所有请求的所有值(当每个请求中的循环完成时),还是每个请求都是唯一的?
在扩展中,修改 SESSION 变量呢?我认为这些应该共享?因此,如果我们将上面的 sn-p 替换为类似下面的内容,那么 $values 数组会包含所有值吗?
$val = $_POST['someField'];
$_SESSION['values'] = array();
for ($i = 0; $i < 10; $i++) {
push($_SESSION['values'], ($val+$i));
}
或者是否有可能,因为一些小的时间差,即使第一个初始化请求已经将一个值写入数组,第二个请求将会话变量重新初始化为一个空数组?那么价值可能会丢失吗?
总结一下:变量是在对同一个 PHP 文件的多个 ajax 请求之间共享的,还是每个请求都是唯一的?那么 SESSION 变量及其初始化呢?如果您知道在 ajax 请求中使用了该文件,那么在 PHP 中使用变量/函数时应该注意什么时候?或者,一般来说:对同一文件的异步请求会相互影响吗?
【问题讨论】:
-
AJAX 分别对待每个周期。您可以在现代浏览器网络监控工具上查看您的 sn-p 所做的事情。一旦脚本返回响应,它就会死掉。它不能再被另一个(不同的)AJAX 调用使用。您可能正在寻找 long polling 这有点说明,不要死,嘿后端脚本!。这些是我的想法。
-
使您的 javascript 请求异步并不会改变 PHP 在处理它们时的行为方式。每个请求都将被赋予其自己的变量范围(包括 globals),除非您通过使用 sessions 或写入 database 来跨多个请求共享数据。