【问题标题】:Send array with Ajax to PHP script and Implode使用 Ajax 将数组发送到 PHP 脚本和 Implode
【发布时间】:2017-03-12 20:13:46
【问题描述】:

这是我的 Ajax POST 请求:

function getRelated() {
    var elements = (document.getElementsByClassName('escashare'));
    var query = [];
    for(var i=0;typeof(elements[i])!='undefined';query.push(elements[i++].getAttribute('data-id')));

    $.ajax({
        type: "POST",
        url: baseUrl+"/requests/get_related.php",
        data: "query="+query+'&_token='+_token, 
        cache: false,

        success: function(html){
            $('#main-content').append(html);
        }
    });
}

所以基本上我POST 是一个int 的数组,例如:

["326", "311", "312", "313", "314", "316", "317", "318", "319", "15", "9", "87"]

当在我的 PHP I implode query 数组中它给了我 NULL 但为什么呢?

$newQuery = implode(',', $QueryFromPost);
var_dump($newQuery); //NULL

编辑

我需要将它用于:

$query = $this->db->query(sprintf("SELECT * FROM `posts` WHERE `id` IN ('%s')", $newQuery));

while($result = $query->fetch_assoc()) {
    $rows[] = $result;
}

if(!empty($rows)) {
    foreach($rows as $row) {
        $output .= '<div class="stage">'.$row['id'].'</div>';
    }
}

return $output;

【问题讨论】:

  • var_dump($QueryFromPost)
  • 将您的 query 对象转换为字符串,然后在您的 PHP 中尝试回显 $QueryFromPost 并检查您得到的结果。
  • @u_mulder 给了我[Object object]
  • @NineCattoRules 使用query.join(',') 将其转换为单个字符串。
  • @NineCattoRules 您需要从字符串中删除引号才能将其用于 mysql 查询。引号可能与您的查询冲突。尝试形成一个正确的查询,然后在你的 mysql 代码中运行它来检查它的有效性。

标签: php ajax php-7.1


【解决方案1】:
    function getRelated() {
      var elements = (document.getElementsByClassName('escashare'));
      var query = [];
      for(var i=0;typeof(elements[i])!='undefined';query.push(elements[i++].getAttribute('data-id')));
   // Right here you can implode the array like this :
    query = query.join();// this is now a string containing your data
    // you can then pass it in your query string 

    var jsonString = JSON.stringify(query);

    $.ajax({
    type: "POST",
    url: baseUrl+"/requests/get_related.php",
    data: {data : jsonString,token: token}, 
    success: function(html){
        $('#main-content').append(html);
    }
   });
  }

在您的服务器端代码中,您将使用explodejson_decode 函数从查询字符串中提取数据。

$data = explode(",", json_decode(stripslashes($_POST['data']));
foreach($data as $d){
    echo $d;
 }
 $token = json_decode(stripslashes($_POST['token']));

编辑 看看这个post,会有用的。

希望对你有帮助。

【讨论】:

  • 就像这一行:所以基本上我发布了一个整数数组,
  • 应该是JS函数
  • 哦,我的错,这是一个错误;是join函数
  • 是的,我已经尝试过 query = query.join(); 看看上面的 cmets
【解决方案2】:

首先在我的 JS 函数中我忘记了:

query.join(',');

接下来在我的 PHP 中,我忘记从我的 MYSQL 查询中删除单引号,而且我根本不需要使用 implode。

这就是我所做的:

JS功能:

function getRelated() {
    var elements = (document.getElementsByClassName('escashare'));
    var query = [];
    for(var i=0;typeof(elements[i])!='undefined';query.push(elements[i++].getAttribute('data-id')));
    query = query.join(',');

    $.ajax({
        type: "POST",
        url: baseUrl+"/requests/get_related.php",
        data: "query="+query+'&_token='+_token, 
        cache: false,

        success: function(html){
            $('#main-content').append(html);
        }
    });
}

PHP函数:

function getRelated($get_query) {

    $query = $this->db->query(sprintf("SELECT * FROM `posts` WHERE `id` IN (%s)", $this->db->real_escape_string($get_query)));

    while($result = $query->fetch_assoc()) {
        $rows[] = $result;
    }

    if(!empty($rows)) {
        foreach($rows as $row) {
            $output .= '<div class="stage">'.$row['id'].'</div>';
        }
    }

    return $output;
}

感谢Ayush

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2016-10-14
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多