每个函数中的条件是为所有记录输出相同的结果集

Condition in each function is outputting same set of results for all records

我正在执行 foreach 循环,然后发送该数据。然后在我的 AJAX 函数中,我在成功函数中输出信息。这一切都很好。

但是,我只是调整了代码以包含一个新的 data-attribute。此 data-attribute 包含 $creator 变量。可以在这里看到:

$html .= '<div class="projectCont" data-current="'.$category.'" data-creator="'.$project_creator.'">';

正在输出正确的数据。

我遇到的问题是将活动 class 添加到容器 - .projectCont,而数据属性 - data-creator 是客户。

现在似乎只检查了最后一个循环对象,然后不管这是什么,其余数据正在处理。

例如:我输出了大约 10 个循环对象。出于测试目的,我仅将其中之一的创建者更改为 "Customer" - 数据库中的最后一个。现在,当所有这些循环和输出时,每条记录都有根据我的条件添加的 class 成功。

有人知道为什么会这样吗?我将这个条件嵌套在每个函数中,认为它会检查和修改每个单独的记录。

有问题的条件(更多代码见JS):

var projectCreator = $('.projectCont').data('creator');
if (projectCreator == 'Customer') {
    $('.creatorIcon').addClass('active');
    console.log("It should be showing");
} else {
    $('.creatorIcon').removeClass('active');
}

JS:

success: function (data) {
  //console.log(data);
    if (data == null) {
        alert("Unable to retrieve projects!");
        alert(data);
    } else {
        var displayProjects = JSON.parse(data);
        $wrapper.empty();
        $(displayProjects).each(function() {
            $wrapper.append(this.html);
            //console.log(this.html);
            var projectCreator = $('.projectCont').data('creator');
            if (projectCreator == 'Customer') {
                $('.creatorIcon').addClass('active');
                console.log("It should be showing");
            } else {
                $('.creatorIcon').removeClass('active');
            }
        });
        $wrapper.append(startBuilding);
    }

PHP:

if ($projects_stmt = $con->prepare($projects_sql)) {
    $projects_stmt->execute();
    $project_rows = $projects_stmt->fetchAll(PDO::FETCH_ASSOC);
    $proj_arr = array();
    foreach ($project_rows as $project_row) {
        $project_creator = $project_row['creator'];
        $html = '';
        $html .= '<div class="projectCont" data-current="'.$category.'" data-creator="'.$project_creator.'">';
        $html .= '<div class="creatorIcon"><img src="/Projects/expand.png" alt="Customer Photo"></div>';
        $html .= '</div>';
        $data = array('id' => $project_row['id'], 'date' => $project_row['date_added'], 'html' => $html);
        $proj_arr[] = $data;
    }
}
echo json_encode($proj_arr);

更多 JS:

$('.categoryList').on('click', function (event) {
        $('#projectsWrap').addClass('active'); //Once a category is selected the project wrap section will show
        $wrapper = $('#projectGallery');
        category = $(this).data('category');

        //console.log(category);
        $.ajax({
            url: '/php/projectLoadTest.php',
            type: 'POST',
            data: {
                'category': category
            },
            success: function (data) {
              //console.log(data);
                if (data == null) {
                    alert("Unable to retrieve projects!");
                    alert(data);
                } else {
                    var displayProjects = JSON.parse(data);
                    $wrapper.empty();
                    $(displayProjects).each(function() {
                        $wrapper.append(this.html);
                        //console.log(this.html);
                        var projectCreator = $('.projectCont').data('creator');
                        if (projectCreator == 'Customer') {
                            $('.creatorIcon').addClass('active');
                            console.log("It should be showing");
                        } else {
                            $('.creatorIcon').removeClass('active');
                        }
                    });
                    $wrapper.append(startBuilding);
                }
            },
            error: function (xhr, textStatus, errorThrown) {
                alert(textStatus + " | " + errorThrown);
                alert('There are currently no project images for this selection');
            }
        });
        //was here
    });

我认为在这种情况下您不应该乱用 JS - 您可以在 PHP:

中执行此 class 操作
if ( $projects_stmt = $con->prepare( $projects_sql ) ) {

  $projects_stmt->execute();

  $project_rows = $projects_stmt->fetchAll( PDO::FETCH_ASSOC );

  $proj_arr = array();

  foreach ( $project_rows as $project_row ) {

    $project_creator = $project_row[ 'creator' ];

    $html = '';

    $html .= '<div class="projectCont" data-current="' . $category . '" data-creator="' . $project_creator . '">';

    // setting the active string - if Customer -> ' active'
    $is_active = ( $project_creator == 'Customer' ) ? ' active' : '';

    $html .= '<div class="creatorIcon' . $is_active . '"><img src="/Projects/expand.png" alt="Customer Photo"></div>';

    $html .= '</div>';

    $data = array( 'id' => $project_row[ 'id' ], 'date' => $project_row[ 'date_added' ], 'html' => $html );

    $proj_arr[] = $data;

  } // foreach

} // if

echo json_encode( $proj_arr );