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


Ajax / PHP: How to pass and receive array between Ajax and PHP (code partially working)

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

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

到目前为止,我有以下的代码工作在jQuery方面,所以第一个console.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);
        }
    });
}

PHP端:

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部分替换为:

 data: {
            node: 'fetchValues',
            values: JSON.stringify(values),
            languageFrm: languageFrm
        },

为PHP。而不是$values = $_POST["values"],你可以这样做:

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

我相信你的PHP SIDE应该是

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 Side

data: {
            node: 'fetchValues',
            values: $.extend({},values),
            languageFrm: languageFrm
        },
<<p> PHP一边/strong>

$result是一个数组。将echo $result;替换为print_r($result);