jQuery Ajax变量传递到PHP

3

我已经困扰了2个星期,因为我决定使用基于jQuery库的漂亮的三维视图。我的问题是,我想把所选文件夹的值作为变量传递给PHP。

我可以通过Jquery获取该值并通过Alertbox显示它,但该值未被提交到PHP变量。echo没有输出任何内容。

下面的文本仅用于说明我为什么需要使用此解决方案以及如何操作。

解决了这个问题后,我将继续努力获取整个路径,然后将其发送到已经完成的bash脚本中。该脚本会创建一个文本文件,其中包含来自FLAC或MP3专辑的元标记,可用于我已经完成和正在运行的SQL数据库。该应用程序是用于数据库维护的本地应用程序。

关于我的问题和代码(请注意,jQuery和Ajax对我来说是全新的)

文件名:file_browser.php jQuery部分

<script>
$(document).ready(function()
{
    $("button").click(function()
    {
        var dir = ($(".active").text())
        $.ajax({
            type: "POST",
            url:"file_browser.php",
            data: dir,
            success: function(data){ 
            alert(dir); dir }
        });
    });
});
</script>

PHP代码

<?php
    echo "<form>
          <button>Append</button>
          <div id'japp'>";
    if (isset($_POST['dir'])) {
        $dir = $_POST['dir']; }
        echo $dir;
       echo "</div> 
              </form>"; 
?>

我将继续尝试,现在至少有一个机会可以得到一些帮助,以避免再花费一周时间 :).


非常抱歉代码格式不正确,我尝试使用4个空格进行缩进。结果告诉我,我显然完全搞错了。 - Lord Metal
Frank,这可能是可以的,但并不是必要的。 - n00b
是的,在提问之后,我做了应该由 OP 做的事情。我去了 jQuery 的网站并查阅了文档。请看下面的答案。 - Frank B
我买了一本jQuery书来减少我对术语的理解不足。我现在已经读完了3章,几乎解决了在变量到PHP之后列表中的下一个问题。 - Lord Metal
太好了!终于解决了。在这个评论区或者回答下面展示我的解决方案哪个更好呢? - Lord Metal
显示剩余3条评论
4个回答

2
从jquery网站上$.ajax的页面:
默认情况下,Ajax请求使用GET HTTP方法发送。如果需要POST方法,则可以通过设置类型选项来指定方法。此选项会影响将数据选项的内容发送到服务器的方式。POST数据将始终使用UTF-8字符集传输到服务器,符合W3C XMLHTTPRequest标准。
数据选项可以包含形式为key1=value1&key2=value2的查询字符串,也可以是{key1:'value1',key2:'value2'}形式的对象。如果使用后一种形式,则在发送之前使用jQuery.param()将数据转换为查询字符串。如果要发送XML对象到服务器,则此处理可能不必要;在这种情况下,请将contentType选项从application/x-www-form-urlencoded更改为更适当的MIME类型以避免处理。
我假设$(".active").text()的值只是您想传递的值,没有任何与之配对的键。按照上面所示的键/值对格式化您的字符串,您就可以顺利完成了。

抱歉我回复晚了,Frank。我很惊讶收到这么多回答的速度。我正在仔细阅读你的文本,以确保我理解一切。关于你所疑惑的值:我还不熟悉键值对,我正在从你给我的文档中学习它。我想发送到 PHP 的值是所选目录的字符串,例如“铁娘子乐队”,它将成为整个目录,但在解决传递字符串到 PHP 变量的问题后,这将是一个问题。 - Lord Metal
要创建一个包含键值对的字符串,您只需要使用以下代码行:var dir = "dir="+$(".active").text();该代码行将获取该值,将其传递给post变量“dir”,并且您的php应该按照编写的方式工作。如果可以,请告诉我是否有效。 - Frank B
键值对是指在特定情况下将一个特定的键(例如“dir”)与一个特定的值(例如“Iron Maiden”)关联起来的方式。关联数组和使用GET HTTP方法时看到的查询字符串都是编程中键/值对的示例。 - Frank B
更改为 var dir = "dir="+$(".active").text(); 后, 弹出框中的字符串结果为 "dir=Iron Maiden"。 PHP 仍为空。 - Lord Metal
那么我会建议尝试对象方法,就像在其他两个答案中找到的那样。 - Frank B

1
如果您需要在$_POST数组中包含dir元素,您需要向脚本发送键值对:
var dir = { "dir": $(".active").text() };

0

解决方案是

{
    $("button").click(function()
    {
        var dir = ($(".active").text()); // from my question (gives name of selected dir)
        $.ajax({
            type: "POST",
            url: "file_browser.php",
            data: { dir: "dir" },
            success: function(response){ // function(response) was (data)
            $('#japp').html(dir);        // points to the forms id="japp"
            alert(dir); }
        });
    });
});

上述问题已解决。

我提到的另一个问题是获取完整路径而不仅仅是目录。部分解决。

它以字符串形式给出带有目录(想要的)+目录一次(不想要的)的完整路径。 它还给出了网站URL,我认为不是根目录(/)(不想要的)+来自文件系统的网页可见路径(想要的)。

这可以通过php中的正则表达式来解决,但我将首先尝试使用此jQuery函数仅获取所需内容,使其更清晰。

我在这里留下了我的几乎完成的解决方案,只是为了给出提示,如果需要的话就可以开始。

var dir = ($(".active").parent('li').text());

感谢@Frank B、@jeroen和@Zim84的所有帮助和引导我走上正确的道路。


0
你应该尝试这个:
<script>
$(document).ready(function()
{
    $("button").click(function()
    {
        // setting a key-value
        var dir = { dir: $(".active").text() };
        $.ajax({
            type: "POST",
            url:"file_browser.php",
            data: dir,
            success: function(data){ 
            alert(dir);} //removed the second 'dir'
        });
    });
});
</script>

谢谢您的回复,我尝试了您的建议。原始代码通过alert fex输出了艺术家的目录名。PHP echo为空。您的代码给出了:alertbox object Object:PHP echo仍然为空。 - Lord Metal
$(".active") 能否匹配到多个元素?执行 console.log($(".active")); 会输出什么? - Zim84
我不确定如何使用console.log,但如果我理解正确,在我的代码中添加console.log后,firebug会显示。 - Lord Metal
源相册名称 与参数中的源相同 :) - Lord Metal

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