php - 从 php 到 JavaScript 的数组

标签 php javascript jquery json

我正在尝试使用 json 将数组列表从 php 传输到 javascript,但它不起作用。

JS:

$.ajax({
url: 'getProfilePhotos.php',
type: 'post', // post or get method
data: {}, // if you need to pass post/get parameterds you can encode them here in JSON format
dataType: 'json', // the data type you want returned... we will use json
success: function(responseData) {
    var arrayList[0] = new Array();
    var lung = arrayList.length;
    for(var i = 0; i<lung; i++)
        //arrayList[i] = responseData.i;
        console.log(responseData.i);
}});

PHP:

<p> <?php  
        $array = array();
        $nr = count($friends['data']);

    for($i = 0; $i < $nr; $i++){
        $array = 'link'=>array("http://graph.facebook.com/".$friends['data'][$i]['id']."/picture");
        ?>
        <img src="http://graph.facebook.com/<?php echo $friends['data'][$i]['id'] ?>/picture" />
        <?php
    }
    header('Content-type: application/json');
    echo json_encode($array);

?></p>

克里斯托弗·麦肯更新

我在控制台中遇到错误。这是错误。

[02:46:21.281] 属性列表 @ http://romanager.ro/api/examples/script.js:3 后缺少 }

script.js 中的第 3 行是

type: 'post', // post or get method

事实上我想从 Facebook 个人资料照片中获取。使用 php 脚本,我设法获取照片,但我可以将 id 从 php 传输到 javascript。如果您需要,我会尝试编写整个 php 脚本和 javascript 文件。

更新

这些脚本仍然存在问题。在 php 脚本中,我对 facebook 上的用户进行身份验证,因为我需要来自 facebook 的用户 ID 来获取他 friend 的 id。要登录,我需要在 php 脚本中创建 html。好吧,我将发布我的脚本代码,希望你能帮助我。

PHP 脚本:

    <?php 
require '../src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '137061043024243',
  'secret' => '619c4dc94343584eb7792ae9933978c9',
  'cookie' => true,
));

// We may or may not have this data based on a $_GET or $_COOKIE based session.
//
// If we get a session here, it means we found a correctly signed session using
// the Application Secret only Facebook and the Application know. We dont know
// if it is still valid until we make an API call using the session. A session
// can become invalid if it has already expired (should not be getting the
// session back in this case) or if the user logged out of Facebook.
$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
    $friends = $facebook->api('/me/friends');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}

// This call will always work since we are fetching public data.
$naitik = $facebook->api('/naitik');

?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
  <head>
    <title>php-sdk</title>
    <style>
      body {
        font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
      }
      h1 a {
        text-decoration: none;
        color: #3b5998;
      }
      h1 a:hover {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <!--
      We use the JS SDK to provide a richer user experience. For more info,
      look here: http://github.com/facebook/connect-js
    -->
    <div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
          appId   : '<?php echo $facebook->getAppId(); ?>',
          session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it
          status  : true, // check login status
          cookie  : true, // enable cookies to allow the server to access the session
          xfbml   : true // parse XFBML
        });


        // whenever the user logs in, we refresh the page
        FB.Event.subscribe('auth.login', function() {
          window.location.reload();
        });
      };

      (function() {
        var e = document.createElement('script');
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
      }());
    </script>


    <?php if ($me): ?>
    <a href="<?php echo $logoutUrl; ?>">
      <img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif">
    </a>
    <?php else: ?>
    <div>
      Using JavaScript &amp; XFBML: <fb:login-button></fb:login-button>
    </div>
    <div>
      Without using JavaScript &amp; XFBML:
      <a href="<?php echo $loginUrl; ?>">
        <img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif">
      </a>
    </div>
    <?php endif ?>
    <?php $array = array();
            $nr = count($friends['data']);

            echo $nr;

        for($i = 0; $i < $nr; $i++) {
            $array[$i] = "http://graph.facebook.com/".$friends['data'][$i]['id']."/picture";
        }
        header('Content-type: application/json');
        echo json_encode($array);
        ?>
  </body>
</html>


JAVASCRIPT

    $.post("getProfilePhotos.php", function(data) { alert(data); console.log(data);/*DO WHAT YOU WANT WITH DATA HERE*/}, "json");

window.onload = init;
function init() {
    if (window.Event) {
        document.addEventListener("mousemove", getCursorXY("mousemove"), false);
        var cursorXX = 0;
        var cursorYY = 0;

        var cursorX = document.getElementById("cursorX");
        var cursorY = document.getElementById("cursorY");

        cursorX.innerHTML = cursorXX;
        cursorY.innerHTML = cursorYY;
    }

    //initializare canvas1
    canvas = document.getElementById('game');
    //coordonatele unde se afla mouseul
    canvas.onmousemove = getCursorXY;

    //initializare canvas2
    canvas2 = document.getElementById('teroristi');
    //coordonatele unde se afla mouseul
    canvas2.onmousemove = getCursorXY;

    //lista de inamici
    lista = new Array();

    initial();

    for(var j = 0; j < 20; j++)
        for(var k = 0; k < 2;k++)
            console.log(matx[j][k]);// = -1000;

    scor = 0;
    viata = 5;

    //creerea contextului de desenare 2D
    ctx2 = canvas2.getContext("2d");
    ctx = canvas.getContext("2d");

    //creerea unui obiect imagine
    img = new Image();
    img.src = 'glont.png';

    imgTerorist = new Image();
    imgTerorist.src = 'terorist.jpg';

    ctx.beginPath();
    ctx.stroke();

    imgviata = new Image();
    imgviata.src = 'vieti.png';
    //score();
    viataF();
}

//initializeaza matricea de aparitii
function initial(){

    matx = new Array(24);
    for (var m = 0; m <24; m++)
        matx[m] = new Array(3);

    for(var m = 0; m < 24; m++)
        matx[m][2] = 0;

    matx[0][0] = 20;
    matx[0][1] = 20;

    for(var m = 1; m < 6; m++){
        matx[m][0] = matx[m-1][0] + 80;
        matx[m][1] = matx[m-1][1];
    }

    matx[6][0] = matx[0][0];
    matx[6][1] = matx[0][1] + 120;

    for(var m = 7; m < 12; m++){
        matx[m][0] = matx[m-1][0] + 80;
        matx[m][1] = matx[m-1][1];
    }

    matx[12][0] = matx[0][0];
    matx[12][1] = matx[0][1] + 240;

    for(var m = 13; m < 18; m++){
        matx[m][0] = matx[m-1][0] + 80;
        matx[m][1] = matx[m-1][1];
    }

    matx[18][0] = matx[0][0];
    matx[18][1] = matx[0][1] + 360;

    for(var m = 19; m < 24; m++){
        matx[m][0] = matx[m-1][0] + 80;
        matx[m][1] = matx[m-1][1];
    }

}

function getCursorXY(e) {

    //se ia pozitia de pe axa x al cursorului
    cursorXX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

    //se ia pozitia de pe axa y al cursorului
    cursorYY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

    //
    var cursorX = document.getElementById("cursorX");
    var cursorY = document.getElementById("cursorY");

    cursorX.innerHTML = cursorXX;
    cursorY.innerHTML = cursorYY;
}

function Nr(){
    return Math.floor(Math.random()*24);
}

//stergerea inamicului
function sterge(x){
    //setTimeout("genereaza(flag)",3000);
    var img = ctx.createImageData(60, 100);
    for (var i = img.data.length; --i >= 0; )
        img.data[i] = 0;
    ctx.putImageData(img, matx[x][0], matx[x][1]);
    matx[x][2] = 0;
}

//genereaza inamici
function genereaza(flag){
    if(flag == 1){
        setTimeout("genereaza(flag)", 2000);
        var x = Nr();
        terorist(x);
        if(lista.length > 3){
            viata = viata - 1;
            sterge(lista[0]);
            lista.splice(0, 1);
            viataF();
        }
    }
}

//creeaza un inamic
function terorist(x){
    console.log("X primit = " + x + "valoarea flagului = " + matx[x][2]);
    //sterge(x);
    if(matx[x][2] == 0){
        ctx.drawImage(imgTerorist,matx[x][0],matx[x][1]);
        matx[x][2] = 1;
        lista.push(x);
    }
    else if(matx[x][2] == 1){

        var q = Nr();
        console.log("in recursie: " + q);
        terorist(q);
    }
}

function viataF(){
    var remove = ctx2.createImageData(20,20);
    for (var i = remove.data.length; --i >= 0; )
        remove.data[i] = 0;
    ctx2.putImageData(remove, 10, (10+(viata*20)));

    console.log(viata);
    for(var m = 0; m < viata; m++)
        ctx2.drawImage(imgviata,10,(10+(m*20)));
}

function impuscat(){

    var shootX = cursorXX;
    var shootY = cursorYY;
    var tm = 0;

    console.log("ShootX = " + shootX + " ShootY = " + shootY);

    for(var m = 0, tm = lista.length; m < tm; m++){
        if(shootX >= matx[lista[m]][0] && shootX <= matx[lista[m]][0] + 60 && shootY >= matx[lista[m]][1] && shootY <= matx[lista[m]][1] + 100){
            sterge(lista[m]);
            lista.splice(m, 1);
            scor = scor + 10;
            console.log("IMPUSCAT");
        }
    }
}

function glont(x, y){
    ctx.beginPath();
    ctx.stroke();
    ctx.drawImage(img,x-40,y-40);
    impuscat();
}

function mouse(){

    impuscat();
    /*console.log('Maus apasat');
    console.log(cursorXX);
    console.log(cursorYY);*/
    //glont(cursorXX, cursorYY);
    //console.log("Dupa glont()");
}
function start(){
    viataF();
    flag = 1;
    genereaza(flag);
    setTimeout("stop()", 10000);
}

function stop(){
    ctx2.fillStyle    = '#000000';
    ctx2.strokeStyle   = '#FFFFFF';
    ctx2.font         = 'bold 30px sans-serif';
    ctx2.fillText  ('TIMPUL A EXPIRAT!', 100, 200);
    ctx2.fillText('Scorul tau este: ' + scor, 100, 235);
    console.log("TIMPUL A EXPIRAT");
    flag = 0;
    genereaza(flag);
}

function score(){
    ctx2.fillStyle    = '#000000';
    ctx2.strokeStyle   = '#FFFFFF';
    ctx2.font         = 'bold 15px sans-serif';
    ctx2.fillText('Scorul tau este: ', 350, 20);
}

最佳答案

您的 PHP 部分是错误的,因为您仍在尝试生成 HTML,而不是仅生成 JSON

循环内的数组处理也不正确。

尝试将 PHP 代码更改为:

<?php
$friendData = array();

foreach ($friends['data'] as $cFriend) {
    $friendData[$cFriend['id']] = "http://graph.facebook.com/" . $cFriend['id'] . "/picture";
}

header('Content-Type: application/json');
echo json_encode($friendData);
exit;

关于php - 从 php 到 JavaScript 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823516/

相关文章:

javascript - CSS 将文本置于图像之上

javascript - 替换 unicode 空格字符

javascript - 如何在新选项卡中打开时重命名服务器上保存的pdf

javascript - 增加 HTML 字符串中数字的值 (jQuery)

javascript - jQuery动画后的图像显示问题

javascript - 通过超链接传递到其他页面的数据被切断

php - "Expected response code 250 but got code "554 ", with message "554 5.2.0 STOR EDRV“

javascript - SVG 相对位置

php - 如何在owncloud后端服务器上安装新模块

PHP + JQuery/AJAX - 带百分比的加载器