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

Posted

技术标签:

【中文标题】将 JavaScript 值传递给 PHP 变量(有限制)【英文标题】:Passing a JavaScript Value to a PHP Variable (With Limitation) 【发布时间】:2012-06-17 06:17:08 【问题描述】:

我了解现有的问题和答案已经解决了这个问题。我已经查看了它们,但我的情况不允许我应用这些线程中提供的解决方案。

鉴于 javascript 是客户端而 php 是服务器端,以下是提供的两种解决方案:

GET/POST Method (Post #3)

AJAX Method


限制:Facebook 页面标签应用程序

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


解决限制:使用 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 Method(因为我仍然只处理 PHP 变量和值而被删除)

使用 JavaScript encodeURIComponent()encodeURI()(错误的方法,因为这些方法对整个 URL 进行编码并且传递的参数无法被 json_decode 识别)

目前正在尝试: JSON 与 Ajax (XMLHttpRequest)

Send JSON data from Javascript to PHP?

How to pass data from Javascript to PHP and vice versa?


我真正想要实现的目标:

PHP 变量在 Facebook iFrame同一页面 中获取 JavaScript 值。页面重新加载给自己传参数就可以了。

fer.php(错误示例)

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


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

我已经尝试解决这个问题好几天了,我什至想通过在我的数据中添加% 来欺骗json_decode,然后将其附加到重定向 URL =x I非常感谢提供的任何帮助或指导。谢谢!

【问题讨论】:

所以,基本上,您是在尝试将数据从带有 html/JavaScript 的页面发送到 PHP 脚本? 是的,我正在尝试将数据发送回同一页面,以便将数据从客户端传递到服务器端。为了确保我没有弄错你的问题,HTML/JavaScript 和 PHP 在同一个文件中(fer.php)。 【参考方案1】:

目前还不清楚你是否愿意:

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

    将数据从 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() 
        // ...
    
);

【讨论】:

我正在尝试将数据从 JavaScript 传递到 PHP。 Ajax 方法对我不起作用,因为我正在开发的 Facebook Page Tab 应用程序不允许我访问查询字符串,除了唯一的 app_data 参数。这就是 app_data 的用武之地,这个 app_data 必须与由 JSON 编码的 Facebook signed_request 一起使用。 @Zany 可以使用 Ajax 直接访问您的 php 脚本,不必先通过 Facebook;事实上,这是不可能的,因为跨域 我尝试从 fer.php 传递到 form.php,但无法在 form.php 中检索到参数 varA。 (fer.php)jsfiddle.net/ADdrR (form.php)jsfiddle.net/cwxXY @Zany 抱歉,但我不知道你在做什么了 =/ @Zany 不知道,从这里开始,您必须使用浏览器的开发工具(例如 Chrome/Safari/Firebug)检查网络活动。【参考方案2】:

例如,您可以使用 javascript 轻松做到这一点 HTML 代码:

<select id = "Select" onchange = "FijarPrecio (this.id);" >
    <option value = "10"> product 1 </ option>
    <option value = "20"> product 2 </ option>
    <option value = "30"> product 3 </ option>
</select>
<input type = "text"  name = "Price" id = "Price"/>
<script type = "text/javascript" >
    FijarPrecio function (id) 
       Preciosel var = document.getElementById (id);
       PrecioActual var = document.getElementById ('Price');
       PrecioActual.value = PrecioSel.value;
    
</script>   

【讨论】:

【参考方案3】:

我真正想要实现的目标:

PHP 变量在 Facebook iFrame 的同一页面中获取 JavaScript 值。页面重新加载给自己传参数就可以了。

最简单的方法:生成一个表单元素,用一些(隐藏的)输入字段填充它,然后将其发布到您的服务器。

AJAX 也是可能的,并且可能对用户更好,因为它不需要重新加载。

由于您没有详细描述任何问题,我只能假设这主要是由于您在这些问题上普遍缺乏知识/经验。所以不妨先找一些教程,对所涉及的技术有一个大致的了解。

【讨论】:

我查看了 GET/POST 和 Ajax 方法。但是,这些方法不能用作“Facebook 页面选项卡在 iFrame 中加载,它们无权访问查询字符串”。 Facebook 提供的唯一解决方法是通过 Facebook signed_request。 我仍然不清楚您实际尝试访问哪些数据。如果它只是查询字符串参数 Facebook 在 iframe 中初始加载您的应用程序时附加到地址 - 当然 JS 可以访问它们;但没有必要,因为它们碰巧首先被转移到服务器端。 参考我的问题的最后一部分,我试图访问我的 someValues() JavaScript 函数中的变量并将它们分配给我的 PHP 变量。但是,这是不可能的,因为数据必须首先发送到服务器,因此将参数传递到另一个/同一页面的整个过程。 但是为什么?这些值来自哪里,它们与查询字符串有什么联系……? 流程是这样的,当页面加载时,我的 JavaScript 函数将根据用户的位置计算 2 个值。在同一页面中,我的应用程序将使用 PHP SDK 将这 2 个值发布到用户的 Facebook 墙上。我面临的问题是将 2 个 JavaScript 值传递给 PHP 端。实现这一点的方法之一是使用查询字符串

以上是关于将 JavaScript 值传递给 PHP 变量(有限制)的主要内容,如果未能解决你的问题,请参考以下文章

将javascript变量传递给php [重复]

Laravel 使用 AJAX 将 Javascript 变量传递给 PHP 并检索那些

如何从 Javascript 提示框中获取值并将其传递给 PHP 变量以便能够保存在 SQL 中?

将 PHP 变量传递给 Javascript

如何从 Blade 格式 HTML 将 PHP 变量传递给 JavaScript 函数

通过 ajax 将 Javascript 变量传递给 PHP