ajax ни на что не отвечает - PullRequest
0 голосов
/ 17 июня 2020

Я создаю веб-страницу, которая позволяет пользователю давать оценку продукту. Я использую ajax для отправки данных на сервер php, который в моем случае должен возвращать {"error":"reviewalready"}. Но ajax не отвечает, не знаю почему? Я запустил страницу сервера вручную, и это нормально. Я попробовал все ответы на ту же проблему, но мне ничего не помогло. Вот index.php, которые содержат форму

<!-- Review and rating form -->
            <div class="review-form">
                <p id="feedbackMessage" style="color:red;"></p>
                <form id="feedbackForm" method="post">
                    <div class="form-group">
                        <input type="hidden" id="hiddenpid" name="pid" class="form-control" value = "<?=$pid?>">
                    </div>
                    <div class="form-group">
                        <textarea class="form-control" id="review" name="feedMessage" cols="50" rows="3" placeholder="Your feedback"></textarea>
                    </div>
                    <input class="btn btn-primary" type="submit"  value="Post" id="feedBtn">
                </form>
          </div>

Javascript

$("#feedbackForm").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);
    formData.append("ratedindex", ratedindex + 1);
    console.log("Form submitted");
    $.ajax({
        method: "post",
        url: "viewserver.php",
        data: formData,
        contentType: false,
        processData: false,
        dataType: "json",
        success: function(response) {
            /* res = JSON.parse(response);
            console.log(res.error); */
            console.log(response);
        }
    });
});

Страница сервера viewserver.php

<?php
session_start();
include 'dbconnection.php';
date_default_timezone_set('Asia/Calcutta');

$userrating = $_POST['ratedindex'];
$userfeedback = $_POST['feedMessage'];
$pid = $_POST['pid'];
$date = date("DD M,y h:i a");
if (isset($_SESSION['uid']) || isset($_COOKIE['uid'])) {
  if (isset($_COOKIE['uid'])) $uid = $_COOKIE['uid'];
  else $uid = $_SESSION['uid'];
  $sql = $connect->prepare("SELECT * FROM `product_rating` WHERE `user_id` = ? AND `product_id` = ?");
  $sql->bind_param("ii", $uid, $pid);
  $sql->execute();
  $result = $sql->get_result();
  if (($result -> num_rows) > 0) {
     echo json_encode(array("error" => "reviewalready"));
  } else {
     $sql = $connect->prepare("INSERT INTO `product_rating` (`user_id`, `product_id`, `rating`, `review`, `date`) VALUES(?, ?, ?, ?, ?)");
     $sql->bind_param("iiiss", $uid, $pid, $userrating, $userfeedback, $date);
     if ($sql->execute()) {
         echo json_encode(array("success" => "posted"));
     } else {
        echo json_encode(array("error" => "postfailed"));
     }
   }
  } else {
     echo json_encode(array("error" => "login"));
  }

?>

Форма отправляется, но ajax не работает. Я считаю, что все правильно, но я не знаю, почему эта проблема тратит мое время?

1 Ответ

0 голосов
/ 19 июня 2020

Проблема решается изменением кода Javascript. Я удалил contentTpe : false и processData : false и вместо отправки данных формы создал объект _data.

$("#feedBtn").click(function(e) {
    e.preventDefault();
    var feedMessage = $("#review").val();
    var pid = parseInt($("#hiddenpid").val());
    var _data = {
        'ratedindex': ratedindex + 1,
        'feedMessage': feedMessage,
        'pid': pid
    };
    console.log(_data);
    $.ajax({
        type: "post",
        url: "viewserver.php",
        data: _data,
        dataType: "json",
        success: function(response) {
            console.log(response);
        },
    });
});

И он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...