【问题标题】:Passing JSON data from a PHP page as a Javascript variable将 PHP 页面中的 JSON 数据作为 Javascript 变量传递
【发布时间】:2018-03-27 18:32:18
【问题描述】:

在 PayPal Checkout Express(客户端)javascript 的中间,我需要使用 AJAX 来调用 PHP 页面的输出,但我有点卡住了。

PHP 页面:

$data = array('retid' => $username);
header('Content-Type: application/json');
echo json_encode($data);

现在在另一个 javascript 页面中,我只想通过 AJAX 将 PHP 变量 $username 捕获为 javascript 变量。

<?php
$IDToPassPlus = ($id.'&retid=');
?>


<script>

//It's the inclusion of this part, which tries to get the "retid" js variable, that stops the script from rendering the Paypal button:
$.ajax({
type: 'POST',
url: 'test-call.php',
dataType: 'json',
success: function(response) {
var retid = response.data.retid; 
},
});


paypal.Button.render({
env: 'sandbox',

client: {
sandbox:    'xxxxx',
production: 'xxxxx'
},

commit: true,

style: {
layout: 'vertical',
size:   'responsive',
shape:  'rect',
color:  'gold'
},

payment: function(data, actions) {
return actions.payment.create({
payment: {
transactions: [
{
amount: { total: '0.99', currency: 'GBP' }
}
],
redirect_urls: {
'cancel_url': 'pay-return-cancel.php?id=<?php echo $IDToPassPlus; ?>'+retid
}
}
});
},


onAuthorize: function(data, actions, error) {
return actions.payment.execute().then(function() {
window.alert('Payment Complete!');
window.location.replace('test-return.php?id=<?php echo $IDToPassPlus; ?>'+retid);
if (error === 'INSTRUMENT_DECLINED') {
actions.restart();
}
});
},

onCancel: function(data, actions) {
return actions.redirect();
},

onError: function(err) {
window.location.replace('pay-return-error.php?id=<?php echo $id; ?>'+retid);
}

}, '#paypal-button');


</script>

没有贡献者的 AJAX 建议,该按钮可以完美运行。但我试图通过 AJAX 从 PHP 页面传递一个变量,以将其添加到重定向中。

【问题讨论】:

  • 您是在使用页面 javascript 还是在单独的页面上?
  • PHP和JS在不同的页面
  • 您不能在 .js 文件中调用 PHP 变量,但您可以将 PHP 变量设置为 HTML dom 元素,然后从 javascript 中读取它。
  • 例如:&lt;meta name="_token" content="&lt;?php csrf_token() ?&gt;"&gt;你可以读取它的数据为:var x = $('meta[name="_token"]').attr('content')
  • 所以你现在正在学习 ajax,这是一个很好的下一步。在尝试将 ajax 与 Paypal 的结帐流程等复杂的东西集成之前(这使得其他人很难帮助您,因为大多数人都不知道该流程),从一个更简单的 ajax 示例开始。从一个非常简单的/测试页面开始,您只需单击一个简单的按钮即可使用 ajax 将 $username 回显到页面。一旦你能做到这一点,那么你就可以在这里编写稍微复杂一些的代码。

标签: php json ajax


【解决方案1】:

可以在页内 javascript 上使用

<script>
var js_var = "<?php echo $php_var;?>";
//now you have php var value in javascript to use on .php page

如果这不是您想要的,请详细说明您的问题。

【讨论】:

  • 我正在尝试将数据从第一个 PHP 页面传递到第二个页面,并通过 ajax 作为 javascript 变量在第二个页面中捕获它这是我的第二个页面的 AJAX javascript 代码我不清楚。
  • 这是在询问如何将 json 输出从 PHP 页面传递到另一个页面 - 如何在 javascript 中使用 ajax 来捕获该变量。
【解决方案2】:

好吧,据我所知,您想通过 ajax 检索 PHP 响应,但您不知道如何进行 ajax 调用。这是您可以在 js 文件中使用的示例:

$.ajax({
               type: 'POST',
               url: 'YOUR PHP SCRIPT URL',

               dataType: 'json',//this will make it understand what datatype to expect in response
               success: function(response) {
                    var retid = response.data.retid; //here you get on successfull response
               },
             });

【讨论】:

  • 这看起来完全正确 - 谢谢 - 但是将它放在我的 PayPal 脚本中会阻止支付按钮工作。
  • 也许我需要一个不使用 JQuery 的示例?
  • 您需要提供完整的代码,节省我们双方的时间。
  • PHP 页面只输出有效的 JSON {"retid":"apple"} 示例代码对我不起作用
【解决方案3】:

首先,阅读整个页面;它会在你作为开发人员的整个职业生涯中真正帮助你,它对我帮助很大:https://stackoverflow.com/help/mcve

然后,让我们使用从该页面获得的知识来制作 MCVE。将此放在新页面上:

$.ajax({
    type: 'POST',
    url: 'test-call.php',
    dataType: 'json',
    success: function(response) {
        var retid = response.data.retid;
        console.log(retid);
    },
});

这应该将 retid 的值打印到您的控制台。看看你的控制台。注意到任何错误,或者 retid 的值是否按预期打印?

那么,为什么我们要花时间创建一个新页面并将其放在上面呢?我们正在缩小我们的问题范围,我们试图通过创建一个 MCVE 来找出问题的确切原因。如果我们不知道是什么导致了问题,并且如果我们不能创建一个非常基本的示例来说明问题,我们将很难解决问题和/或寻求帮助.

(注意 1,当你在这里发布代码时,让你的代码“漂亮”。缩进它应该缩进;这让其他人更容易阅读。你是在要求人们抽出时间来帮助你,免费;让他们尽可能轻松地阅读和理解您的代码)

(注 2,这是一个示例,说明我遇到了一些非常非常复杂的 MySQL 交互问题。我没有发布所有复杂的代码,而是遵循 MCVE 概念:DRY - how to extract repeated code to...a stored function maybe? 并做了一些我的问题的假的、非常简化的示例。因为我这样做了,所以我能够从专家那里获得快速、简洁的答案,请注意我接受的答案来自 Stackoverflow 上得分最高的用户之一)

【讨论】:

  • 我一直在单独做sn-ps。尝试上面的代码在控制台中显示 404
  • 好的,现在我们知道了一些东西,这比“它不工作”要好得多。 404 错误意味着找不到文件,对吧?什么文件没有找到?可能是 test-call.php 所以看起来我们在 $.ajax 调用中的url 定义是不正确的
  • 这很奇怪,因为如果我放弃 test-call.php 的 JSON 输出,而只从那里输出一个字符串,这将起作用:&lt;script&gt;function reqListener () { console.log(this.responseText); } var oReq = new XMLHttpRequest(); oReq.onload = function() { var retid = (this.responseText); document.write(retid); }; oReq.open("get", "test-call.php", true); oReq.send(); &lt;/script&gt;。换句话说,retid 被返回并输出。但我也没有办法将这段代码引入 PayPal 代码而不破坏它。
  • 虽然我仍然得到带有后续代码的 404。
  • 你肯定想使用 $.ajax 请求;下一步是弄清楚这个 404。在stackoverflow上搜索“ajax文件位置”,你应该找到你需要的。如果您阅读和研究并尝试不同的事情并且在自己努力后无法让它发挥作用,那么您知道该练习:) 以 MCVE 格式创建一个新的 stackoverflow 问题
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多