2015-02-23 3 views
0

Я пытаюсь передать переменные из файла Javascript в файл PHP. Из моего файла JS:Передать переменную с Javascript на PHP с помощью AJAX

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 я получаю «Undefined переменной: диапазон в URL»

Любая помощь будет оценен по достоинству!

+0

Вы смотрели запрос/ответ в консоли браузера? –

ответ

3

Вы создаете запрос AJAX с помощью 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: jQuery будет правильно форматировать ваши данные для вас, независимо от того, что вы переходите на $.ajax. Я хотел бы предложить следующее:

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

+0

@ user2100620: Обновляет мой ответ, ATM, это '$ _POST ['query'] ['range'] [0] [0]' и '$ _POST ['query'] ['range'] [0] [1 ] ', потому что' dataQuery.range' объявлен как 2D-массив ('[[' <== 2 '[' означает 2 массива). –

+0

Я сделал точно так, как вы сказали, и я все еще получаю «Неопределенная переменная: нижний/верхний в URL», когда я пытаюсь использовать значения из $ lower & $ upper в вызове api – user2100620

Смежные вопросы