一尘不染

将JavaScript值传递给PHP变量(有限制)

json

我了解到,已有问题和答案已经解决了此问题。我已经仔细检查了它们,但是由于我的处境,我无法应用这些线程中提供的解决方案。

假定JavaScript是客户端,而PHP是服务器端,则提供了以下两种解决方案:

GET / POST方法(第3个帖子)


限制:Facebook页面选项卡应用程序

我无法使用以上方法通过URL传递参数,因为Facebook页面选项卡已加载到iFrame中,但它们无权访问查询字符串。通过提供app_dataFacebook
signed_request对象中的GET参数以及JSON编码,Facebook提供了一种解决方法。


解决限制:使用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


我真正想要达到的目标:

PHP变量在 Facebook iFrame*同一页面 中获取JavaScript值。可以重新加载页面以将参数传递给自身。 *

fer.php (错误的示例)

function someValues(){
    varA = 123;
    varB = 456;
}

<?php
    $cupA = varA;
    $cupB = varB;
?>

我已经尝试解决这个问题了好几天了,我一直在努力扩展,甚至尝试在将数据附加到重定向URL =
x之前json_decode添加%到我的数据中来欺骗我,我非常感谢给出的任何帮助或指导。谢谢!


阅读 223

收藏
2020-07-27

共1个答案

一尘不染

尚不清楚是否要:

  1. 通过PHP将您在PHP中收到的数据传递app_data给JavaScript,或者

  2. 将数据从JavaScript传递到PHP。

将数据从PHP传递到JavaScript

<head>
<script type="text/javascript">
var app_data = <?php echo json_encode($appData); ?>;
</script>
</head>
<body>
...

将数据从JavaScript传递到PHP

$.ajax({
    url: location.pathname, // current page
    type: 'POST',
    data: {
        vara: 'hello',
        varb: 'world'
    },
    success: function() {
        // ...
    }
});
2020-07-27