Я пытаюсь передать список массивов с php на javascript с помощью json, но он не работает.
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
строка 3 в script.js
type: 'post', // post or get method
На самом деле я хочу получить фотографии из профиля facebook. с php-скриптом мне удалось получить фотографии, но я могу передавать идентификаторы от php до javascript. если вам нужно, я попытаюсь написать весь скрипт php и файлы javascript.
Обновить
все еще есть проблемы с этими сценариями. в php-скрипте я делаю и аутентифицирую пользователя на facebook, потому что мне нужен идентификатор пользователя из facebook, чтобы получить идентификаторы его друзей. для входа в систему мне нужно создать html в php-скрипте. хорошо, я опубликую код моих сценариев, и я надеюсь, что вы мне поможете.
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://img.ruphp.com/php/cxrz4k7j.gif"> </a> <?php else: ?> <div> Using JavaScript & XFBML: <fb:login-button></fb:login-button> </div> <div> Without using JavaScript & XFBML: <a href="<?php echo $loginUrl; ?>"> <img src="http://img.ruphp.com/php/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;
Заголовок не будет работать в этом случае, поскольку вы не можете выводить какой-либо контент (включая пробелы) в браузер до вызова header (). В вашем цикле for вы выводите HTML в браузер, что приведет к ошибке.
Как сказал Орблинг, вы также неправильно добавляете элемент в массив. Я просто предполагаю, что это то, что вы хотите, но цикл, который вы хотите:
for($i = 0; $i < $nr; $i++) { $array[] = "http://graph.facebook.com/".$friends['data'][$i]['id']."/picture"; }
Я смущен тем, чего вы пытаетесь достичь с помощью своего javascript. Я бы использовал следующий код, чтобы упростить:
$.post("getProfilePhotos.php", function(data) { alert(data); //DO WHAT YOU WANT WITH DATA HERE }, "json");
Сначала я запустил этот код, чтобы проверить, как вы вернете JSON, а затем играете с функцией обратного вызова, чтобы делать то, что вы хотите, с возвращенным json.