在PHP中调用Javascript函数不起作用

时间:2012-02-17 05:09:17

标签: php javascript facebook

我是Google文档的新手,并设置了一个电子表格,可以访问三个不同Facebook页面上的“喜欢”数量。该代码是Google Documents上的库的一部分,但我正在尝试将得到的总数并将其提取到我的网站上,即PHP。我只是因为无法让它工作而开始只使用一个网站。

以下是为编译喜欢而编写的Javascript:

function FacebookFans(aPageId)
{
  if (aPageId === undefined || aPageId === null)
  {
    throw "No parameter specified. Write Facebook PageID as parameter."
  }

  if (typeof aPageId != "number")
    throw "Parameter must be number.";

  // See http://developers.facebook.com/docs/reference/fql/page/ for API documentation
  var url = "http://api.facebook.com/method/fql.query?query=SELECT%20page_id,page_url,fan_count%20FROM%20page%20%20WHERE%20page_id=%22" + encodeURIComponent(aPageId) + "%22";

  var response = UrlFetchApp.fetch(url);

  if (response.getResponseCode() != 200)
    throw "Unexpected response code from Facebook.";

  var responseText = response.getContentText();

  if (responseText == null || responseText == "")
    throw "Empty response from Facebook.";

  var fan_count = 0;

  try
  {
    var xml = Xml.parse(responseText, false);
    var page = xml.getElement().getElement();

    if (page == null)
      throw "Wrong PageID.";

    fan_count = parseInt(page.getElement("fan_count").getText());
  }
  catch (e)
  {
    throw "Problem with response from Facebook: " + e;
  }

  return fan_count;
}

现在,作为序言,我是Javascript的新手,所以如果我的代码已经关闭,不要杀了我,我仍然试图理解。我试图在体内运行它:

<script type="text/javascript">
document.write(FacebookFans(40796308305));
</script>

我认为该函数返回一个值,这将打印出该值(btw的数字是可口可乐的Facebook页面ID,认为这是一个很好的测试)。这是Javascript和PHP之间的冲突吗?我知道这是客户端和服务器端脚本的混合体。我不确定什么是错的原因是我在Javascript中设置了var,然后用于document.write调用它来测试我的代码是否有效并且它回忆了{{1}好的。无论如何,非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

我使用Google Docs脚本调试程序逐步完成您的脚本。

第一个箭头是启动脚本的原因。在Select Function的下拉列表中,选择我创建的“doit”功能(参见屏幕截图的底部)。最后,您可以单击第二个箭头指向的位置并创建断点,以便调试器停止。

google docs script debugger

在完成所有代码后,您会很高兴知道它的工作正常。

您的问题必须与您对代码运行方式/时间的理解有关。注意这些代码中没有PHP,所以我不确定你为什么要问PHP。

您需要某些“操作”才能运行脚本。您可以阅读有关how scripts are run in Google docs的更多信息。但是你的document.write不适用于此,因为你没有为网页编写脚本。您位于Google文档环境中。

如果您想在Google文档的外部运行脚本,则说明UrlFetchApp调用存在问题,因为这是特定于Google的内容。如果您在.html文档中加载该脚本(并将其放入标记内),则可以使用Google Chrome查找错误。选择扳手图标 - >工具 - > Javascript控制台,它会立即显示错误。现在,通常您可以将其转换为其他内容,但Javascript会尽力阻止您发出跨域请求(learn more)。

要将其转换为服务器端代码,在PHP中非常简单。您基本上只是调用一个URL然后使用XML解析它。要加载网址内容,请使用file_get_contents,然后parse the xml

答案 1 :(得分:0)

如果FacebookFans(40796308305)确实有效并返回结果,那么问题就出现在document.write中。 尝试:

 <script type="text/javascript">
 alert(FacebookFans(40796308305));
 </script>

确保该功能有效。和

 <script type="text/javascript">
 var a=FacebookFans(40796308305);
 document.write('a='+a);
 </script>

检查不同类型的问题。

如果没有任何帮助,那么我们需要更多信息,你如何调用这个功能。