开发者

array from php to JavaScript

i am trying to transfer a array list from php to javascript with json, but it does not work.

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>

Update for Christopher McCann

i have got a error in console. this is the error.

[02:46:21.281] missing } after property list @ http://romanager.ro/api/examples/script.js:3

line 3 in script.js is

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

In fact i want to get from facebook profile photos. with php script i managed to get photos, but i can transfer ids from php to javascript. if you need i will try to write entire php script and javascript files.

Update

still have problems with these scripts. in php script i do and authentification of user on facebook, because i need for user ID from facebook to get ids of his friends. to make login i need to create html in php script. well i will post the code of my scripts and i hope you will help me.

PHP script:

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


Your PHP section is wrong as you are still trying to generate HTML, rather than just JSON.

Also the array handling within the loop is incorrect.

Try changing the PHP code to:

<?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;


Header will not work in this case as you cannot output any content (including whitespace) to the browser before you call header(). In your for loop you output HTML to the browser which will cause an error.

As Orbling said you are also not correctly adding the element to the array. I am just assuming this is what you want but the loop you want is:

for($i = 0; $i < $nr; $i++) {
     $array[] = "http://graph.facebook.com/".$friends['data'][$i]['id']."/picture";
 }

I am confused by what you are trying to achieve with your javascript. I would use the following code instead to simplify:

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

I would run that code first to check you get the JSON back and then play about with the callback function to do what you want with the returned json.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜