为什么我得到数组如何获取字符串


Why am I getting array how to get string

如果我有带有id leavepost和隐藏的div id display的文本区域在 # 之后,我得到了隐藏的div 和变量名称中带有 # 的单词但是当我想通过 ajax 发送到 sul 文件时,它会发送数组。怎么了?

$("#leavepost").keypress(function(event) {
    var key = (event.keyCode ? event.keyCode : event.which);
    if (key == 35) {
        $('#display').show();
        $('#leavepost').on('keyup', function() {
            var name = $(this).val().match(/(^|'s)(#[a-z'd-]+)/ig);
            $.ajax({
                type: "POST",
                url: "d/sul.php",
                data: { su: name },
                success: function(sss)
                {
                    $('#display').html(sss);
                }
            });
        }).keyup();
    }
});

在 sul 内部.php我有:

echo $_POST['su'];
$u = mysqli_real_escape_string($con, $_POST['su']);

错误:

警告:mysqli_real_escape_string() 期望参数 2 为字符串, 给定数组

.match()返回匹配测试的数组。

// for example:
"xzxzxz".match(/z/gi)    // => [z,z,z]
"xzxzxz".match(/z/gi)[0] // => "z"

使用.match(/(^|'s)(#[a-z'd-]+)/ig)[0]获取第一个匹配项。

或者,您可以.match(/(^|'s)(#[a-z'd-]+)/ig).join(",")以字符串形式发送所有测试匹配项。

// for example
"xzxzxz".match(/z/gi).join(",") // => "z,z,z"
"xzxzxz".match(/z/gi).join("")  // => "zzz"

你在这个代码中使用var name = $(this).val().match(/(^|'s)(#[a-z'd-]+)/ig); String.prototype.match(),这个方法返回:

包含整个匹配结果和任何匹配结果的数组 括号捕获的匹配结果,如果没有,则为 null 比赛。

所以你需要像处理数组一样在 php 代码中使用$_POST['su'];变量

这是因为JavaScript match函数返回一个数组。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match

您需要从该数组中提取name部分。 console.log(name)将为您提供数组的结构。