使用AJAX将变量从Javascript传递到PHP

时间:2015-02-23 15:46:21

标签: javascript php ajax

我试图将变量从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中的范围"

任何帮助将不胜感激!

1 个答案:

答案 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'];