Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 异步ajax调用会弄乱图像源_Php_Jquery_Facebook Graph Api_D3.js - Fatal编程技术网

Php 异步ajax调用会弄乱图像源

Php 异步ajax调用会弄乱图像源,php,jquery,facebook-graph-api,d3.js,Php,Jquery,Facebook Graph Api,D3.js,我正在使用D3.js和Facebook PHP SDK来显示访问者的朋友。每个朋友都显示在一个小div中,其中包含姓名和个人资料图片 我的问题是Facebook API没有返回到个人资料图片的直接链接。相反,您必须使用类似https://graph.facebook.com/UserID/picture?redirect=false,图片的URL以JSON格式返回。所有其他好友数据都已提取并存储在Javascript数组中 现在,我设置了一个AJAX调用来处理这个问题,但是由于它的异步特性,它不

我正在使用D3.js和Facebook PHP SDK来显示访问者的朋友。每个朋友都显示在一个小div中,其中包含姓名和个人资料图片

我的问题是Facebook API没有返回到个人资料图片的直接链接。相反,您必须使用类似
https://graph.facebook.com/UserID/picture?redirect=false
,图片的URL以JSON格式返回。所有其他好友数据都已提取并存储在Javascript数组中

现在,我设置了一个AJAX调用来处理这个问题,但是由于它的异步特性,它不起作用。获取图片URL后,DOM就已经加载,图像也会得到

来自main.js

function ajax(path) {
  $.ajax({
    type: "GET",
    url: "ajax.php",
    data: {'path': path},
    success: function(data) {
        return data; //returned data is correct
    }
  })
}

// d3 code
profile.append("img")
  .attr("src", function(d) { return ajax(d.id); }) //this is "undefined"
  .attr("class", "thumb");
来自ajax.php

$path = file_get_contents('https://graph.facebook.com/' . $_GET['path'] . '/picture?redirect=false');
echo json_decode($path)->data->url;

Ajax是异步的,请求完成时会调用回调,请尝试以下方法:

function ajax(path, profile) {
  $.ajax({
    type: "GET",
    url: "ajax.php",
    data: {'path': path},
    success: function(data) {
        profile.append($('<img/>', {src: data, 'class': 'thumb'));
    }
  })
}

//d3
ajax(d.id, profile);
函数ajax(路径、配置文件){
$.ajax({
键入:“获取”,
url:“ajax.php”,
数据:{'path':path},
成功:功能(数据){

profile.append($('您将获得
,因为
ajax
不会返回任何内容。请将代码更改为:

function ajax(path, callback) {
  $.ajax({
    type: "GET",
    url: "ajax.php",
    data: {'path': path},
    success: function(data) {
        callback(data);
    }
  })
}


我明白你的意思了。问题是在D3回调函数之外,
d.id
不可用。
var img = profile.append("img").attr("class", "thumb");
ajax(d.id, function(data) { img.attr("src", data); });