将来自PHP页面的JSON数据作为Javascript变量传递

时间:2018-03-27 18:32:19

标签: php json ajax

在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页面传递变量,将其添加到重定向中。

3 个答案:

答案 0 :(得分:0)

可以在页面内使用javascript作为

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

如果不是您所寻求的,请详细说明您的问题。

答案 1 :(得分:0)

好的,所以到目前为止我知道你想通过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
               },
             });

答案 2 :(得分:0)

首先,阅读整个页面;它将在您作为开发人员的整个职业生涯中真正帮助您,它极大地帮助了我: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上所有得分最高的用户之一)