我试图将变量从Javascript文件传递到PHP文件。 来自我的js文件:
dataQuery = {
range: [[range.lower, range.upper]],
detail: { id: detail.id }
};
$.ajax({
type: "POST",
async: true,
url: scope.fetchUrl,
data: { query: dataQuery }
})
.done(function( data ) {
alert("success!");
}
在我的php文件中,我有会话变量,因为我需要进行oauth身份验证。
if (isset($_SESSION['accessToken']))
{
$companyId = "1234";
$rollupFreq = "1H";
$oauth->setToken(
$_SESSION['accessToken'],
$_SESSION['accessTokenSecret']);
$apiUrl = ($apiBaseUrl
. '&company_id=' . urlencode($companyId)
. '&rollup_frequency=' . urlencode($rollupFreq)
. '&start_datetime_utc=' . urlencode($range['lower'])
. '&end_datetime_utc=' . urlencode($range['upper'])
);
try
{
header('Content-Type: application/json');
$data = $oauth->fetch($apiUrl);
$responseInfo = $oauth->getLastResponse();
print_r($responseInfo);
if (isset($_GET['query']))
{
$range = $_GET['query'];
print_r($range);
}
}
}
当我尝试打印$ range时没有出现任何内容,当我尝试在url中使用$ range中的值时,我得到"未定义的变量:url中的范围"
任何帮助将不胜感激!
答案 0 :(得分:3)
您正在使用 POST 创建AJAX请求:
$.ajax({
type: "POST",
//...
});
然而,在您的PHP代码中,您使用$_GET
变量:
$range = $_GET['query'];
将$_GET
更改为$_POST
。
你也在使用$range
变量(例如在urlencode($range['upper'])
中),但实际上没有任何代码可以声明,更不用说初始化它了。这就是“未定义变量”的原因通知你正在看
最后,您发送给PHP的数据将如下所示:
$_POST['query']['range'] = array(
array(range.lower, range.upper)//whatever these values may be
);
所以要获得range.lower
值,你必须写:
$_POST['query']['range'][0][0];
//for the upper:
$_POST['query']['range'][0][1];
那太乱了。 see the docs:无论您传递给$.ajax
的是什么,jQuery都会为您正确格式化数据。我建议如下:
dataQuery = {
range: {lower: range.lower, upper: range.upper},
detail: { id: detail.id }
};
$.ajax({
type: "POST",
//async: true, <== you can leave this out
url: scope.fetchUrl,
data: dataQuery
}).done(function( data ) {
alert("success!");
});
然后,在PHP中,您可以更直观地获取值:
$upper = $_POST['range']['upper'];
//to get a range array:
$rage = range(
(int) $_POST['range']['lower'],//these values are strings so cast
(int) $_POST['range']['upper'] //to ints to get a numeric range
);
$detailId = $_POST['detail']['id'];