通过Jquery AJAX传递PHP变量

4

我正在尝试学习Jquery AJAX函数,但是我很难弄清楚如何将PHP变量传递到我的主文档。

这是我目前的代码:

<script>
  var refreshId = setInterval(function() {
    $.ajax({
      url: "test.php",
      dataType: "json", //the return type data is jsonn
      success: function(data){ // <--- (data) is in json format
        $('#testdiv').html(data.test1);
        $('#testdiv').append(html(data.test2));
        //parse the json data
      }
    });

}, 1000);
</script>

2
应该会有人详细回答你的问题。但是你可以开始查看 api.jquery.com 上的 getJSON。并使用 PHP 方法 json_encode 对数据进行编码并将其发送回您。 - JohnP
嗨JohnP,感谢您的回复。我已经简要查看了getJSON页面,但我发现从Jquery网站上很难理解。您介意修改我的代码来实现这个功能,这样我就可以从您的操作中学习吗? - Daniel H
@user683526 看看用户experimentX做了什么。那就是你需要的。在PHP端使用json_encode,在JS端使用json调用。 - JohnP
1
无效的函数 html(data.test2),请尝试使用 $('#testdiv').html($('#testdiv').html() + data.test2); - S L
5个回答

5
你应该使用 jsonxml 格式来解析它,然后获取变量。
<script src="jquery.js"></script>
<script>
    $.ajax({
      url: "test.php",
      dataType: "json", //the return type data is jsonn
      success: function(data){ // <--- (data) is in json format
        alert(data.test1);
        //parse the json data
      }
    });
</script>

test.php上。
<?php

$test = array();
$test['test1'] = '1';
$test['test2'] = '2';
$test['test3'] = '3';

echo json_encode($test);
//echo nothing after this //not even html

嗨,experimentX,谢谢你的帮助。我已经尝试将这个添加到我的页面中,但现在根本没有输出显示,我可能做错了。你介意看一下我的更新帖子,并指出需要更改的地方吗? - Daniel H
@user683526,您能否更改您的显示名称?当然,我会查看并更新。 - S L
@experimentX: 为什么不能在那个echo之后再加点什么很重要呢?如果那个echo在条件语句中怎么办...if(..) echo json_encode($test), else echo json_encode($test2)。我知道你可以做一个最终的echo,但我想知道为什么不能在echo json_encode(...)之后添加任何内容。谢谢 :) - Nobita
谢谢experimentX :) 我有点难以理解,但这真的很有帮助。是否可以将data.test1放入一个div中,并定期更新它呢? - Daniel H
非常感谢您的帮助,experimentX :) - Daniel H
显示剩余3条评论

1

另一种方法(使用ajax和隐藏字段)是:

$.ajax({
    type: 'POST',
    url: "test.php",
    dataType: "json", //the return type data is jsonn
    success: function(data){ // <--- (data) is in json format
        $('#testdiv').html('<input type="hidden" value="' + data.test1 + '" />');
    }
    error: ajaxError,
    dataType: "html"
});

在表单中使用这个值,甚至可以在下一个 Postback 中直接使用它,而无需直接传递它。


那个负面评论是什么?如果他想从Javascript获取它,那么HiddenField是一个适当的选择。当HiddenField通过Ajax加载时,他可以访问它,所以问题出在哪里? - bastianwegge
我给你点了个踩,因为楼主不知道如何通过AJAX来完成它。所以你的回答实际上并没有解决问题。如果你更新你的答案,让它包括使用AJAX的方式来完成,我会很乐意点赞。你的回复至少要涉及通过AJAX将数据传递到隐藏字段的部分。 - JohnP
我已经编辑过了,希望您对此满意。我的解决方案本应在ajax请求中,但我只是忘了提到它。我可以道歉吗? - bastianwegge
@wegginho 这个回答完全没问题。希望你能理解我下投票的原因。 - JohnP
首先,我以为你不会理解我的意思,一天之后,我自己也不明白我在说什么,所以感谢你的理解! - bastianwegge

1
index.php 的 ajax 选项中使用 dataType='json',在 test.php 中使用 json_encode
$ret_array= array ($test1, $test2 and $test3);
echo json_encode($ret_array);

再次回到 index.php

现在如果你想在你的 *J*S 文件中使用它,那么通过对象导航或使用 getJSON 方法进行访问

如果你想直接在php中使用该数据,则使用 json_decode

json_decode($ret_array,true);

参考资料

json_encode
getJSON
json_decode


这个问题涉及如何将test.php中的3个变量传递到index.php中的JS变量中。json_decode在此无用,因为它是PHP方法。 - JohnP
发送数据到indx.php后,他可以通过简单的对象表示法访问,我说得对吗? - xkeshav
在从test.php发送数据到index.php之后,他可以通过对象表示法访问它。这是你需要在你的答案中包含的内容 :) - JohnP

-1

除非我大错特错,否则这很简单:

<?php
  include 'test.php';
?>

在index.php中包含test.php文件

然后你可以像在index.php中设置的变量一样调用它们,我会这样做将它们传递给jQuery:

$("#test1")等等...

更新

我的问题是test.php中的变量将不断变化,然后需要在index.php中更新这些变量。 我只设置它们为1、2和3来测试。- user683526 1分钟前

在这种情况下,将它们设置在一个函数中并返回值。


不对,你误解了。他想通过在index.php上进行的AJAX调用来传递来自test的变量。 - JohnP
我遇到的问题是test.php中的变量将不断变化,然后需要在index.php上进行更新。我只是将它们设置为1、2和3来测试。 - Daniel H
1
好的,他也许应该更好地表达问题,比如说:“请问如何将三个变量$test1、$test2和$test3传递到index.php中,以便在页面上调用它们?” - Alex

-1

你不需要将它们传递给index.php,但可以将它们作为内容添加到通过ajax加载的东西中,就像这样:

$test1 = '1';
$test2 = '2';
$test3 = '3';

echo $test1 . "<br/>" . $test2 . "<br/>" . $test3 . "<br/>";

你误解了。他想要读取test.php的输出,并将其作为JS变量使用。 - JohnP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接