Ajax/PHP:如何在Ajax和PHP之间传递和接收数组(代码部分工作)

Ajax/PHP:如何在Ajax和PHP之间传递和接收数组(代码部分工作),php,arrays,ajax,multidimensional-array,associative-array,Php,Arrays,Ajax,Multidimensional Array,Associative Array,我是Ajax和PHP新手,希望有人能帮助我 我需要在jQuery中生成一个具有唯一ID的数组,将其传递到PHP页面并从PHP页面返回相应的值 到目前为止,我有以下代码在jQuery端工作,因此第一个控制台.log正确记录输入数组,例如[“1”、“2”、“3”、“4”、“5”] 但是,我没有从PHP页面得到任何结果,第二个console.log没有为输出数组记录任何内容,因此我想我缺少了一个或多个内容。 结果应该是一个关联数组,其中列出了每个项目的tID和MySQL查询中的相应值,如“tID”=>

我是Ajax和PHP新手,希望有人能帮助我

我需要在jQuery中生成一个具有唯一ID的数组,将其传递到PHP页面并从PHP页面返回相应的值

到目前为止,我有以下代码在jQuery端工作,因此第一个
控制台.log
正确记录输入数组,例如
[“1”、“2”、“3”、“4”、“5”]

但是,我没有从PHP页面得到任何结果,第二个
console.log
没有为输出数组记录任何内容,因此我想我缺少了一个或多个内容。 结果应该是一个关联数组,其中列出了每个项目的tID和MySQL查询中的相应值,如
“tID”=>“1”,“value”=>“value1”

有人能帮我吗

JS侧:

function getValues(languageFrm){
    var values = [],
        tID;

    $('.valuesDynamic').find('.values').each(function(){
        tID = $(this).attr('name').replace('tID', '');
        if($.inArray(tID, values) === -1){
            values.push(tID);
        }
    });
    values.sort();
    console.log(values);

    $.ajax({        
        type: "post",   
        url: "ajax.php",
        cache: "false",
        data: {
            node: 'fetchValues',
            values: values,
            languageFrm: languageFrm
        },
        success: function(data){
            console.log(data);
        }
    });
}
case "fetchValues":
    $values = $_POST["values"];
    $languageFrm = $_POST["languageFrm"];

    $stmt = $conn->prepare("SELECT tID, " . $languageFrm . " FROM main WHERE tID IN(?) ORDER BY tID");
    $stmt->bind_param("s", implode(",", $values));
    $stmt->execute();
    $result = $stmt->get_result();
    while($arrValues = $result->fetch_assoc()){
        $result[] = array("tID" => $arrValues["tID"], "value" => $arrValues[$languageFrm]);
    }

    echo $result;
    break;
PHP端:

function getValues(languageFrm){
    var values = [],
        tID;

    $('.valuesDynamic').find('.values').each(function(){
        tID = $(this).attr('name').replace('tID', '');
        if($.inArray(tID, values) === -1){
            values.push(tID);
        }
    });
    values.sort();
    console.log(values);

    $.ajax({        
        type: "post",   
        url: "ajax.php",
        cache: "false",
        data: {
            node: 'fetchValues',
            values: values,
            languageFrm: languageFrm
        },
        success: function(data){
            console.log(data);
        }
    });
}
case "fetchValues":
    $values = $_POST["values"];
    $languageFrm = $_POST["languageFrm"];

    $stmt = $conn->prepare("SELECT tID, " . $languageFrm . " FROM main WHERE tID IN(?) ORDER BY tID");
    $stmt->bind_param("s", implode(",", $values));
    $stmt->execute();
    $result = $stmt->get_result();
    while($arrValues = $result->fetch_assoc()){
        $result[] = array("tID" => $arrValues["tID"], "value" => $arrValues[$languageFrm]);
    }

    echo $result;
    break;

非常感谢您的帮助。

您可以对数组进行JSON编码,然后在PHP端进行JSON解码

对于JS端,您可以将数据部分替换为:

 data: {
            node: 'fetchValues',
            values: JSON.stringify(values),
            languageFrm: languageFrm
        },
对于PHP。您可以执行以下操作,而不是
$values=$\u POST[“values”]

$values = json_decode($_POST["values"]);

我相信你的
PHP方面应该

case "fetchValues":
$values = implode(",", $_POST["values"]);
$languageFrm = $_POST["languageFrm"];

$stmt = $conn->prepare("SELECT tID, " . $languageFrm . " FROM main WHERE tID IN($values) ORDER BY tID");
$stmt->execute();
$result = $stmt->get_result();
while($arrValues = $result->fetch_assoc()){
    $result[] = array("tID" => $arrValues["tID"], "value" => $arrValues[$languageFrm]);
}

echo $result;
break;

换句话说,您必须将
$values
直接放在查询中

JS端

data: {
            node: 'fetchValues',
            values: $.extend({},values),
            languageFrm: languageFrm
        },
PHP端

data: {
            node: 'fetchValues',
            values: $.extend({},values),
            languageFrm: languageFrm
        },

$result
是一个数组。因此,替换
echo$result带有
打印($result)

谢谢您!我会试试看。我在其他一些帖子中读到了这一点,我觉得jQuery会自动执行这一操作,这样这里就不需要stringify了。实际上不确定是否是这种情况,但您可以通过var_转储该变量轻松地进行检查。var_dump($_POST[“values”]);这将精确地向您显示内部内容,如果实际上它已经是json编码的,您可以简单地保持原样,只在PHP端执行json_解码。我尝试了您的方法,但它没有改变任何东西,因此在这种情况下,结果仍然是空的。var_dump返回什么?是$_POST['languageFrm']和$_POST['node']当您转储它们时,会出现这样的错误吗?谢谢,这仍然会阻止SQL注入吗?我尝试了这个方法,它返回了一个致命错误“对非对象调用成员函数execute()。