2015-02-23 64 views
0

我试图将变量从Javascript文件传递到PHP文件。 从我的js文件:使用AJAX将变量从Javascript传递到PHP

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); 
      } 
    } 
} 

没有出现,当我尝试在URL中使用的值从$范围我得到“未定义的变量:在URL范围”

任何帮助,将不胜感激!

+0

你看了在浏览器的控制台中的请求/响应? – 2015-02-23 15:47:19

回答

3

您正在创建使用POST AJAX请求:

然而,在你的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']; 
+0

你说得对POST/GET,谢谢。但我对使用$ range感到困惑,我该如何访问从js传入的较低和较高值? – user2100620 2015-02-23 15:57:36

+0

@ user2100620:更新我的答案,ATM,即'$ _POST ['query'] ['range'] [0] [0]'和$ _POST ['query'] ['range'] [0] [1 ]',因为'dataQuery.range'被声明为二维数组('[['<== 2'['意味着2个数组)。 – 2015-02-23 15:59:51

+0

我已经完全按照你所说的完成了,当我尝试在api调用 – user2100620 2015-02-23 17:03:15