我了解到,已有问题和答案已经解决了此问题。我已经仔细检查了它们,但是由于我的处境,我无法应用这些线程中提供的解决方案。
假定JavaScript是客户端,而PHP是服务器端,则提供了以下两种解决方案:
GET / POST方法(第3个帖子)
限制:Facebook页面选项卡应用程序
我无法使用以上方法通过URL传递参数,因为Facebook页面选项卡已加载到iFrame中,但它们无权访问查询字符串。通过提供app_dataFacebook signed_request对象中的GET参数以及JSON编码,Facebook提供了一种解决方法。
app_data
signed_request
解决限制:使用app_data GET参数
通过再次加载同一页面,我可以将参数传递给同一页面,但是 我仍然只处理PHP变量和值 。
fer.php
<?php $appData = array(); if (!empty($signedRequest) && !empty($signedRequest['app_data'])) { $appData = json_decode($signedRequest['app_data'], true); } echo '<pre>' . print_r($appData) .'</pre>'; //prints Array ( [lat] => 123 [lon] => 456 ) when fer.php reloads $params = array( 'lat' => '123', 'lon' => '456' ); $encodedParams = urlencode(json_encode($params)); $tabUrl = 'http://www.facebook.com/pages/FACEBOOK_PAGE/367117263337064?sk=app_433576149993619'; //$tabUrl will open fer.php $linkUrl = $tabUrl . '&app_data=' . $encodedParams; ?> ... function loopPage() { top.location = "<?= $linkUrl ?>"; //reloads fer.php }
参考:http://labs.thesedays.com/blog/2011/06/23/query-strings-for- facebook-page-tabs/
也尝试过:
Cookie方法(由于我仍然只处理PHP变量和值而被删除)
使用JavaScript encodeURIComponent()和encodeURI()(错误的方法,因为这些方法对整个URL进行编码,并且传递的参数未被识别json_decode)
encodeURIComponent()
encodeURI()
json_decode
我真正想要达到的目标:
PHP变量在 Facebook iFrame* 的 同一页面 中获取JavaScript值。可以重新加载页面以将参数传递给自身。 *
fer.php (错误的示例)
function someValues(){ varA = 123; varB = 456; } <?php $cupA = varA; $cupB = varB; ?>
我已经尝试解决这个问题了好几天了,我一直在努力扩展,甚至尝试在将数据附加到重定向URL = x之前json_decode添加%到我的数据中来欺骗我,我非常感谢给出的任何帮助或指导。谢谢!
%
尚不清楚是否要:
通过PHP将您在PHP中收到的数据传递app_data给JavaScript,或者
将数据从JavaScript传递到PHP。
<head> <script type="text/javascript"> var app_data = <?php echo json_encode($appData); ?>; </script> </head> <body> ...
$.ajax({ url: location.pathname, // current page type: 'POST', data: { vara: 'hello', varb: 'world' }, success: function() { // ... } });