За последние 24 часа нас посетили 21948 программистов и 989 роботов. Сейчас ищут 683 программиста ...

Условный оператор if

Тема в разделе "JavaScript и AJAX", создана пользователем wade003, 16 апр 2019.

  1. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    Подскажите пожалуйста как правильно записать условный оператор в этом примере:
    <script type="text/javascript">
    $(document).ready(function () {
    $("button#send").click(function () {
    var text = $("#text").val();
    $.ajax({
    url: "?action=add-topic",
    type: "POST",
    data: {text: text},
    dataType: "json",
    success: function (result) {
    if (result) {
    $('.bbp-body').remove();
    $('.bbp-forums').append(function () {
    var res = '';
    for (var i = 0; i < result.list.name.length; i++) {
    res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[/i]/ + "'>" + result.list.name[/i/]/ + "</a></li>" + if(result.user.admin == 1){ + "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>" + } + "</ul></li>"
    }
    return res;
    });
    $('button.bbp-forum-delete-topic').click(function (e) {
    e.preventDefault();
    var parent = $(this).parent();
    var id = $(this).attr("id");
    let isConfirmed = confirm('Are you sure you want to delete this topic?');
    if (isConfirmed) {
    $.ajax({
    type: 'POST',
    url: '?action=delete-topic',
    data: {id: id},
    beforeSend: function () {
    parent.animate({'backgroundColor': '#fb6c6c'}, 300);
    },
    success: function () {
    parent.slideUp(300, function () {
    parent.remove();
    });
    }
    });
    }
    });
    console.log(result.user.admin);
    } else {
    alert(result.errors);
    }
    return false;
    }

    });
    });

    });
    </script>
    [/I][/I]
     
  2. Boothooz

    Boothooz Активный пользователь

    С нами с:
    8 май 2016
    Сообщения:
    63
    Симпатии:
    6
    изменить на
    Код (Javascript):
    1. res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[/i]/ + "'>" + result.list.name/ + "</a></li>";
    2. result_user_admin = '';
    3. if(result.user.admin == 1){ result_user_admin =  "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>" ; }
    4. res += result_user_admin + "</ul></li>"
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    У тебя result.list.name и result.user.admin это два массива?
    Просто ты приходишься по массиву result.list.name.
    Массив выглядит так?:
    Код (Javascript):
    1. var result = [
    2.     list : [
    3.         'admin': '123',
    4.         'name': 'name',
    5.         'id': 'id'
    6.    ]
    7. ]
    Если так, то проходись по list:
    Код (Javascript):
    1. var res = '';
    2. for (var i = 0; i < result.list.length; i++) {
    3.       var button = '';
    4.       if(result.user.admin[i] == 1){
    5.         button = "<button class='bbp-forum-delete-topic' id='"
    6.                + result.list.id[i] +
    7.         "'>Delete</button>";
    8.       }  
    9.       res += "<li class='bbp-body'>"
    10.             +"<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>"
    11.             +"<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[i] + "'>" + result.list.name[i] "</a></li>" +  button  + "</ul></li>"
    12.    }
    13. }
    14. return res;
    А вообще такое на сервере делается, зачем на клиент js эту логику тащить?
    --- Добавлено ---
    Вот тоже самое на php:
    PHP:
    1. $array; // твой массив
    2. $result = '';
    3. foreach($array['list'] as $item ){
    4.     $button = '';
    5.     if($item['admin'] == 1){
    6.       $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>";
    7.    }
    8.  
    9.    $result  .= "<li class='bbp-body'>"
    10.              ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>"
    11.              ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>";
    12.  
    13. }
    14.  
    15. return $result;
     
  4. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    Спасибо всем за ответы.
    Boothooz спасибо что показал каким способом условный оператор можно вставить в эту конструкцию.

    Artur_hopf Все нужные данные подтягиваются с сервера с PHP при загрузке страницы а дальше я пользуюсь JS/Ajax для добавления новых тем в БД и соответственно на страницу а также удаления тем без перезагрузки. По другому как это возможно реализовать пока что, к сожалению, я не знаю.
    --- Добавлено ---
    Вот код целой страницы:
    <?php require_once ROOT . '/views/layouts/header.php' ?>

    <div class="container sitecontainer bgw">
    <div class="row">
    <div class="col-md-12 m22 single-post">
    <div class="widget">
    <div class="large-widget m30">
    <div class="post-desc">
    <div id="bbpress-forums">
    <div class="table-responsive">
    <ul class="bbp-forums">
    <li class="bbp-header">
    <ul class="forum-titles">
    <li class="bbp-forum-info">Topics</li>
    <li class="bbp-forum-reply-count">Posts</li>
    <?php if ($user['admin'] == 1): ?>
    <li class="bbp-forum-delete-topic">Delete topic</li>
    <?php endif; ?>
    </ul>
    </li><!-- .bbp-header -->

    <?php foreach ($topicList as $topic): ?>
    <?php $id = $topic['id']; ?>
    <?php $total = Comment::getTotalComments($id); ?>
    <li class="bbp-body">
    <ul class="forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish">
    <li class="bbp-forum-info">
    <a class="bbp-forum-title"
    href="?action=view-topic&id=<?php echo $topic['id'] ?>">
    <?php echo $topic['name'] ?>
    </a>
    </li>
    <li class="bbp-forum-reply-count"><?php echo $total ?></li>
    <?php if ($user['admin'] == 1): ?>
    <button class="bbp-forum-delete-topic"
    id="<?php echo $topic['id'] ?>">Delete
    </button>
    <?php endif; ?>
    </ul><!-- end bbp forums -->
    </li>
    <?php endforeach; ?>
    </ul><!-- .forums-directory -->
    <div id="new-topic"></div>
    </div>
    </div> <!-- /bbpress -->

    </div>
    <!-- end post-desc -->
    </div>
    <!-- end large-widget -->
    </div>
    <!-- end widget -->

    <!--create topic-->
    <div class="form">
    <p>Add topic</p>
    <p>
    <textarea name="text" id="text"></textarea>
    </p>
    <p>
    <button id="send">Send</button>
    </p>
    </div>
    <script type="text/javascript">
    $(document).ready(function () {
    $("button#send").click(function () {
    var text = $("#text").val();
    $.ajax({
    url: "?action=add-topic",
    type: "POST",
    data: {text: text},
    dataType: "json",
    success: function (result) {
    if (result) {
    jQuery('.bbp-body').remove();
    jQuery('.bbp-forums').append(function () {
    var res = '';
    for (var i = 0; i < result.list.name.length; i++) {
    result_user_admin = '';
    if(result.user.admin == 1){
    result_user_admin = "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>";
    }
    res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id + "'>" + result.list.name + "</a></li>" + result_user_admin + "</ul></li>"
    }
    return res;
    });
    $('button.bbp-forum-delete-topic').click(function (e) {
    e.preventDefault();
    var parent = $(this).parent();
    var id = $(this).attr("id");
    let isConfirmed = confirm('Are you sure you want to delete this topic?');
    if (isConfirmed) {
    $.ajax({
    type: 'POST',
    url: '?action=delete-topic',
    data: {id: id},
    beforeSend: function () {
    parent.animate({'backgroundColor': '#fb6c6c'}, 300);
    },
    success: function () {
    parent.slideUp(300, function () {
    parent.remove();
    });
    }
    });
    }
    });
    console.log(result.user.admin);
    } else {
    alert(result.errors);
    }
    return false;
    }

    });
    });

    });
    </script>
    <!--success: function () {
    $("#new-topic").append("<div class='text' style='border: 1px solid #F2F2F2; height: 80px; padding: 25px 5px 5px 20px; font-family: Verdana, Geneva, sans-serif; font-size: 18px'>" + text + "</div>");
    $("textarea#text").val("");
    }-->
    <!--end create topic-->
    </div>
    <!-- end col -->
    </div>
    <!-- end row -->
    </div>
    <!-- end container -->


    <!--script delete topic-->
    <script type="text/javascript">
    $(document).ready(function () {
    $('button.bbp-forum-delete-topic').click(function (e) {
    e.preventDefault();
    var parent = $(this).parent();
    var id = $(this).attr("id");
    let isConfirmed = confirm('Are you sure you want to delete this topic?');
    if (isConfirmed) {
    $.ajax({
    type: 'POST',
    url: '?action=delete-topic',
    data: {id: id},
    beforeSend: function () {
    parent.animate({'backgroundColor': '#fb6c6c'}, 300);
    },
    success: function () {
    parent.slideUp(300, function () {
    parent.remove();
    });
    }
    });
    }
    });
    });
    </script>
    <!--end script delete topic-->

    <?php require_once ROOT . '/views/layouts/footer.php' ?>
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @wade003 Вот смотри, ты возвращаешь с помощью ajax массив, потом на клиенте превращаешь его в html блоки. А почему ты это сразу не делаешь на сервере php?
     
  6. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    Вот экшн:
    1. public function actionAddTopic()
    2. {
    3. $text = $_POST['text'];
    4. $date = date("Y-m-d H:i:s");
    5. Topic::addTopic($text, $date);
    6. if(empty(User::checkLogged())){
    7. $user['admin'] = null;
    8. }else{$user = User::checkLogged();}


    9. $topicList = array();
    10. $topicList = Topic::test();
    11. /*echo '<br>';
    12. print_r($topicList);
    13. echo '<br>';*/
    14. $errors = 'ok';
    15. $out = array(
    16. 'errors' => $errors,
    17. 'list' => $topicList,
    18. 'user' => $user,
    19. );
    20. header("Cotent-Type: text/json; charset=utf-8");
    21. echo json_encode($out);
    22. return true;
    23. }
    --- Добавлено ---
    Ты имеешь ввиду в экшене? В переменную out поместить весь HTML/PHP код?
    Покажи пожалуйста как бы ты это сделал. Как реализовать учитывая MVC и ООП?
     
  7. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @wade003 в массиве полюбому есть ошибки, но как то так:
    PHP:
    1. public function actionAddTopic(){
    2.     $text = $_POST['text'];
    3.     $date = date("Y-m-d H:i:s");
    4.     Topic::addTopic($text, $date);
    5.     if(empty(User::checkLogged())){
    6.         $user['admin'] = null;
    7.     }else{
    8.         $user = User::checkLogged();
    9.     }
    10.  
    11.     $topicList = array();
    12.     $topicList = Topic::test();
    13.     $errors = 'ok';
    14.     $out = array(
    15.         'errors' => $errors,
    16.         'list' => $topicList,
    17.         'user' => $user,
    18.     );
    19.  
    20.     return $out;
    21. }
    22.  
    23. public function createAddTopic(){
    24.  
    25.     $topic = Topic::actionAddTopic();
    26.     $result = '';
    27.     foreach($topic->list as $item ){
    28.         $button = '';
    29.         if($topic->user[0]['admin'] == 1){
    30.            $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>";
    31.         }
    32.         $result  .= "<li class='bbp-body'>"
    33.                ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>"
    34.              ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>";
    35.     }
    36.     return json_encode($result);
    37. }
    Ajax запросом обращаешься уже к createAddTopic()
     
  8. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    В твоем примере actionAddTopic() должен только добавлять тему в БД или еще что то?
     
  9. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Оно просто создает твой массив. Который потом забирает функция createAddTopic()
    --- Добавлено ---
    Сейчас ты забираешь ajax этот массив, потом его обрабатывает клиент. А можно это сделать тупо на сервере,и возвращать клиенту готовый результат.
    --- Добавлено ---
    Единственное пост запрос надо добавить во 2ую функцию и передать его вот так:
    PHP:
    1. public function actionAddTopic($text){
    2.     $date = date("Y-m-d H:i:s");
    3.     Topic::addTopic($text, $date);
    4.     if(empty(User::checkLogged())){
    5.         $user['admin'] = null;
    6.     }else{
    7.         $user = User::checkLogged();
    8.     }
    9.     $topicList = array();
    10.     $topicList = Topic::test();
    11.     $errors = 'ok';
    12.     $out = array(
    13.         'errors' => $errors,
    14.         'list' => $topicList,
    15.         'user' => $user,
    16.     );
    17.     return $out;
    18. }
    19. public function createAddTopic(){
    20.     $text = $_POST['text'];
    21.     $topic = Topic::actionAddTopic($text);
    22.     $result = '';
    23.     foreach($topic->list as $item ){
    24.         $button = '';
    25.         if($topic->user[0]['admin'] == 1){
    26.            $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>";
    27.         }
    28.         $result  .= "<li class='bbp-body'>"
    29.                ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>"
    30.              ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>";
    31.     }
    32.     return json_encode($result);
    33. }
    --- Добавлено ---
    Но говорю я там массив с ошибкой обрабатываю, переделай сам по структуре. Это у тебя фреймворк yii2?
     
  10. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    Я сразу не понял. Возможно ты имел ввиду вместо $topic= Topic::actionAddTopic(); написать $topic = self::actionAddTopic(); или хотя бы все в одном экшене поместить?
     
  11. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вот в идеале как должно быть:

    Экшн контроллер:

    PHP:
    1. public function actionAddTopic(){
    2.         $result = Topic::createAddTopic();
    3.         return json_encode($result);
    4. }
    Модель топик:

    PHP:
    1. public function getTopic($text){
    2.      $date = date("Y-m-d H:i:s");
    3.     Topic::addTopic($text, $date);
    4.     if(empty(User::checkLogged())){
    5.         $user['admin'] = null;
    6.     }else{
    7.         $user = User::checkLogged();
    8.     }
    9.     $topicList = array();
    10.     $topicList = Topic::test();
    11.     $errors = 'ok';
    12.     $out = array(
    13.         'errors' => $errors,
    14.         'list' => $topicList,
    15.         'user' => $user,
    16.     );
    17.     return $out;
    18. }
    19.  
    20. public function createAddTopic(){
    21.    $text = $_POST['text'];
    22.    $topic = Topic::actionAddTopic($text);
    23.     $result = '';
    24.     foreach($topic->list as $item ){
    25.         $button = '';
    26.         if($topic->user[0]['admin'] == 1){
    27.             $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>";
    28.          }
    29.          $result .= "<li class='bbp-body'>"
    30.             ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>"
    31.           ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>";
    32.      }
    33.     return json_encode($result);
    34. }
    --- Добавлено ---
    И js запрос можно так записать:
    Код (Javascript):
    1. var text = $("#text").val();
    2. $.post( "?action=add-topic", { text : text  }, function( data ) {
    3.   console.log(data);
    4. }, "json");
     
  12. wade003

    wade003 Новичок

    С нами с:
    13 мар 2019
    Сообщения:
    30
    Симпатии:
    1
    Не могу ответить конкретно потому еще не пробовал ни один фреймворк. Он с курсов
     
  13. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Если просто учишься, не парься =) Просто многое можно сделать на сервере.
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    @wade003 ты заметил, что твой код выглядит хуже, чем код комментаторов?
    Оформляй код в
    [ php ] ... [ /php ]
    ( без пробелов )
    тогда будет красиво и всем будет удобно тебе помогать.
    --- Добавлено ---
    Ещё можно
    [ code=JavaScript ] ... [ /code ]
    ( без пробелов )
    --- Добавлено ---
    Не послушаешь - схлопочешь бан