将file_get_contents用于循环中的不同URL似乎会破坏其余的代码

时间:2011-03-26 18:21:07

标签: php jquery loops xmlhttprequest file-get-contents

我目前正在尝试获取一些Facebook数据,然后我想在Javascript中访问。具体来说,我试图访问用户朋友的一些特征。 所以我使用file_get_contents将用户的好友列表添加到他的图API API中。 这为我提供了一系列朋友ID。

因为我需要每个朋友的特征,我正在做:

foreach($dataarray as $friend) {
$friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
$fdata = json_decode(file_get_contents($friendurl));
if($fdata->gender == "male") {
 array_push($fulldata, $fdata->name);
    }
}

拥有此代码段似乎打破了javascript代码,因为没有运行任何警报说明。

另外,在if之后插入一个break,这样只做一个file_get_contents,似乎可以使代码运行(但我显然需要通过所有的朋友)。

我该如何解决这个问题?

我会使用jQuery或xmlHttpRequest来执行HTTP GET,但不知何故,我似乎总是回到状态代码为0,响应为空。

编辑: 这是JS代码:

<script type="text/javascript">
        function initialize() {

                alert('Test1');
                <?php

                $fulldata = array();

                $data = $result->data;

                foreach($data as $friend) {
                    $friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
                    //echo("alert(\"".$friendurl."\");");
                    $fdata = json_decode(file_get_contents($friendurl));
                    if($fdata->hometown->name) {
                        array_push($fulldata, $fdata->hometown->name);
                    }
                }
                echo ("alert(\"".count($fulldata)."\")");
                ?>

                }
         </script>

我还应该补充说,这是在使用画布功能嵌入到facebook中的页面上完成的。

2 个答案:

答案 0 :(得分:1)

...试

function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    return curl_exec($ch);
    curl_close ($ch);
}

foreach($dataarray as $friend){
    $friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
    $fdata = json_decode(curl($friendurl));
    if($fdata->gender == "male"){
            array_push($fulldata, $fdata->name);
        }
}

也许FGC已停用,但您没有收到任何通知/警告。

评论代码:

error_reporting(E_ALL); ini_set("display_errors", 1);

答案 1 :(得分:-1)

请注意,您正在进行跨域AJAX调用,出于安全原因这是禁止的。 您可以在服务器上执行api调用并将数据回显到客户端JS,或者您可以构建一个php代理返回Graph API调用的结果(因为代理服务器位于您自己的服务器上,它们位于同一个域中)。