2016-04-26 14 views
1

私はPHPファイルにパラメータを送り、次のJavaScriptいる:PHPファイルの出力に次のHTMLを変更するPHP配列をJavaScript変数に渡すにはどうすればよいですか?

function getOutput() 
{ 
$.ajax({ 
url:'myPHPFile.php', 
data:{APIKey:$APIKey,Password:$APIPass,Alias:$Alias,DataCenter:$DataCenter}, 
type:'POST', 
complete: function (response) { 
$('#output').html(response.responseText); 
}, 
error: function() 
{ 
$('#output').html('Bummer: there was an error!'); 
} 
}); 
return response.responseText; 
}` 

:ここ

<a href="#" onclick="return getOutput();"> test </a> 

はPHP

<?php 
// echo nl2br("\nIntializing api.php \n"); 
// DATA SECTION 
$APIKey = $_POST["APIKey"]; 
$APIPass = $_POST["Password"]; 
$AccountAlias = $_POST["Alias"]; 
$dataCenter = $_POST["DataCenter"]; 

$data = array(
    "APIKey" => $APIKey, 
    "Password" => $APIPass, 
); 

$url_send = 'https://api.ctl.io/REST/Auth/Logon/'; 
$json_data = json_encode($data); 

function sendPostData($url, $post, $cook = null){ 
// echo "Beginning sendPostData($url, $post, $cook)"; 

$ch = curl_init($url); 
$headers= array('Accept: application/json','Content-Type: application/json'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$post); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

if (!empty($cook)) 
    { 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json','Content-Type: application/json','Cookie:'.$cook));  
    } 

$result = curl_exec($ch); 
curl_close($ch); // Seems like good practice 
return $result; 
}; 
$myresult = sendPostData($url_send, $json_data); 
// print_r ($myresult); 
$decodedresult = json_decode($myresult); 
// print_r ($decodedresult); 
'/reply-(.*?)-private/'; 
preg_match_all('/Tier3(.*?)path=/', $myresult, $matches); 
$cookies = array(); 

foreach($matches[0] as $item) 
     { 
      parse_str($item, $cookie); 
      $cookies = array_merge($cookies, $cookie); 
     } 
$prefix = 'Tier3.API.Cookie='; 
$cookie = implode(" ",$matches[0]); 

// Call the customer server list 
$data = array(
    'AccountAlias' => $AccountAlias, 
    'Location' => $dataCenter 
); 
$data_url =  'https://api.ctl.io/REST/Server/GetAllServersForAccountHierarchy/'; 
$data_string = json_encode($data); 

$dataResult = sendPostData($data_url,$data_string, $cookie); 
print_r($dataResult); 
return $dataResult; 
されます

どのようにして$ dataResul私はそれを解析することができますので、JavaScript配列にPHPの配列?これはAPIからの大きなJSON応答です。

ありがとうございました。

+2

jsonをajaxレスポンスとして送信するか、ページを生成するときにそのページに埋め込みます: 'var somevar = <?php json_encode($ your_array); ?>; ' –

+0

[PHP配列をJavaScript関数に渡す]の可能な複製(http://stackoverflow.com/questions/4885737/pass-a-php-array-to-a-javascript-function) –

答えて

0

Ajaxの呼び出しは(通常)非同期です。つまり、return response.responseText;がすぐに実行され、responseに関するエラーが発生することがあります。

あなたはajax呼び出しのcompleteイベントで応答し、その中でスクリプトの実行を続けるべきです。 jQueryはJSONを自動的に解析し、responseが結果のオブジェクトになります。

反対側では、PHPスクリプトは応答が有効なJSONになるように、json_encode()の結果との結果を出力するだけです。

関連する問題