Skip to main content

How to fix Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (

I need some help with this error:Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at Object.success However, on my webiste on every page I have the some contact form where on every page data need be sent to different email address, so all email addresses I save and get from database. Without jQuery code form is sent successfully, all data inserted into db, and in place of jQuery AJAX response I get valid JSON like:

[{"response":"success","content":"Thanks John Doe! Your message is successfully sent to owner of property Hotel Paris! You will get an answer soon!"}]

or if I try to use JSON_FORCE_OBJECT in this case I get valid JSON too, with content

{"0":{"response":"success","content":"Thanks John Doe! Your message is successfully sent to owner of property Hotel Paris! You will get an answer soon!"}}

but with jQuery and AJAX instead a displey a user successfull message I get in network response just empty [] or empty {} with JSON_FORCE_OBJECT. I was spent allready one month, reading complete google how to use json_encode in this case and somewhere for the some case like my case I was find that $jsonData=[]; need be declared before first if statement, so I think too that my PHP code is ok if sent email correctly on every page,insert data into db and in place of jQuery return valid JSON. So bellow it's my form:

<?php
include_once 'inc/form_process.php';
?>
<form  spellcheck="false" autocomplete="off" autocorrect="off" id='contact' class='form' name='contact' action='' method='POST'>
<h4 id="response" class="success"><!-- This will hold response from the server --></h4>
  <fieldset>
    <legend>Your data</legend>
        <div class="form-control halb InputIconBg"><input minlength="6" type="text" class="input username" name="fname" placeholder="Your name..." value="<?php echo Input::get('fname'); ?>"><i class="fas fa-user" aria-hidden="true"></i><span class="error"><?=$fname_error; ?></span></div><!-- end .form-control -->
        <div class="form-control halb InputIconBg"><input minlength="9" type="text" class="input phone" name="tel" placeholder="Your phone..." value="<?php echo Input::get('tel'); ?>"><i class="fas fa-phone-alt" aria-hidden="true"></i><span class="error"><?=$tel_error; ?></span></div><!-- end .form-control --> 
    </fieldset>
    <input type="submit" class="btn_submit" id="submit" name="submit" value="SEND"/>
</form>
<script src="/JS/validOwner.js"></script>

and this is php code

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// define variables and set to empty values
$fname = $tel = $email_address_id = "";
$fname_error = $tel_error = "";
$error = false;
//Load the config file
$dbHost = "localhost";
$dbUser = "secret";
$dbPassword = "secret";
$dbName = "booking";
$dbCharset = "utf8";
try{
    $dsn = "mysql:host=" . $dbHost . ";dbName=" . $dbName . ";charset=" . $dbCharset;
    $pdo = new PDO($dsn, $dbUser, $dbPassword);
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}catch(PDOException $e){
    echo "Error: " . $e->getMessage();
}     
use PHPMailer\PHPMailer\PHPMailer;
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';
require 'PHPMailer/Exception.php';

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if(isset($_POST['submit'])){
        //print_r($_POST);
    $fname = $_POST['fname'];
    $tel = $_POST['tel'];

    if(empty($_POST['fname'])){
        $error=true;
        $fname_error = "Name can not be empty!";
    }else{
        $fname = $_POST['fname'];   
        if(!preg_match("/^[a-zšđčćžA-ZŠĐČĆŽ\s]*$/", $fname)){
            $fname_error = "Name can contain just letters and white space!";
        }
    }
    if(empty($_POST['tel'])) {
        $tel_error = "Phone can not be empty!";
    }else{
        $tel = $_POST['tel'];
        if(!preg_match('/^[\+]?[0-9]{9,15}$/', $tel)) {
            $tel_error = "Phone can contain from 9 to 15 numbers!";
        }
    }
    if($fname_error == '' && $tel_error == ''){
    // Instantiate a NEW email
    $mail = new PHPMailer(true);
    $mail->CharSet = "UTF-8";
    $mail->isSMTP();
    $mail->Host = 'secret.com';
    $mailOwner->SMTPAuth = true;
    //$mailOwner->SMTPDebug = 2;
    $mailOwner->Username = 'booking@secret.com';
    $mailOwner->Password = 'secret';
    $mailOwner->Port = 465; // 587
    $mailOwner->SMTPSecure = 'ssl'; // tls
    $mailOwner->WordWrap = 50;  
    $mailOwner->isHTML(true);
    $mailOwner->setFrom('booking@secret.com');
    $mailOwner->clearAddresses();
    $mailOwner->Subject = "New message from secret.com";
    
    $query_m = "SELECT owners_email.email_address_id, email_address, owner_name, owner_property, owner_sex, owner_type FROM booking.owners_email INNER JOIN booking.pages ON (pages.email_address_id = owners_email.email_address_id) WHERE `owner_sex`='M' AND `owner_type`='other' AND `pages_id` = ?";
    $dbstmt = $pdo->prepare($query_m);
    $dbstmt->bindParam(1,$pages_id);
    $dbstmt->execute();
    //var_dump($dbstmt);
    //get emails from db via pdo
    $emails = $dbstmt->fetchAll(PDO::FETCH_ASSOC);
    $jsonData=[];
    if(is_array($emails) && count($emails) > 0){
        foreach ($emails as $email){
        //var_dump($email['email_address']);
            $mail->addAddress($email['email_address']);
                $body = "<p>Dear {$email['owner_name']}, <br>" . "You just received a message from <a href='https://www.secret-booking.com'>secret-booking.com</a><br>The details of your message are below:</p><p><strong>From: </strong>" . ucwords($fname) . "<br><strong>Phone: </strong>" . $tel . "</p>";
                $mail->Body = $body;            
                if($mail->send()){
                    $mail = "INSERT INTO booking.contact_owner (fname, tel, email_address_id) VALUES (:fname, :tel, :email_address_id)";
                    $stmt = $pdo->prepare($mail);
                    $stmt->execute(['fname' => $fname, 'tel' => $tel, 'email_address_id' => $email['email_address_id']]);
                    
                if($error==false){
                    $data['response']="success";
                    $data['content']="Thanks ".ucwords($fname)."! Your message is successfully sent to owner of property {$email['owner_property']}!";
                    $jsonData[] = $data;
                }
                }//end if mail send 
                else{
                    $data['response'] = "error";
                    $data['content'] = "Something went wrong! Try again..." . $mail->ErrorInfo;
                    $jsonData[] = $data;
                }       
    }//end foreach for email addresses
}//end if for array of emails

//echo str_replace("[]", "{}", json_encode($jsonData));
//echo json_encode($jsonData, JSON_FORCE_OBJECT, true);
//exit;
//print_r($jsonData);
echo json_encode($jsonData);
    }//end if validation
}//end submit
}//end REQUEST METHOD = POST

And this is my jQuery code

"use strict";
jQuery(document).ready(function () {
  jQuery.validator.addMethod('validFname', function (value, element) {
    if (/^[a-zšđčćžA-ZŠĐČĆŽ ]+$/gi.test(value)) {
      return true;
    } else {
      return false;
    }
  });
  jQuery.validator.addMethod('validTel', function (value, element) {
    if (/^[\+]?[0-9]{9,15}$/gm.test(value)) {
      return true;
    } else {
      return false;
    }
  });

  jQuery("#contact").submit(function (event) {
    event.preventDefault();
  }).validate({
    rules: {
      fname: {
        required: true,
        validFname: true,
        minlength: 6
      },
      tel: {
        required: true,
        validTel: true,
        minlength: 9
      }
    },
    messages: {
      fname: {
        required: 'Name can not be empty!',
        validFname: 'Name can contain just letters!',
        minlength: 'Name must have minimum 6 letters'
      },
      tel: {
        required: 'Phone can not be empty!',
        validTel: 'Phone can contain max 15 numbers!',
        minlength: 'Phone must contain min 9 numbers!'
      }
    },
    submitHandler: function (form) {  
      var formData = jQuery("#contact").serialize();
      console.log(formData);
      jQuery.ajax({
        url: '/inc/form_process.php',
        type: 'post',
        data: formData,
        dataType: 'json',
        cache: false,
        success: function (data) {
          var decodedArray = JSON.parse(data);
          jQuery("#response").text(decodedArray[0]['content']);
          console.log(decodedArray[0].content);
         // debbuger;
        },
        error: function (jqXHR, textStatus, errorThrown){
           console.log(JSON.stringify(jqXHR));
           console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
        }
      }); //Code for AJAX Ends
      // Clear all data after submit
      var resetForm = document.getElementById('contact').reset();
      return false;
    } //submitHandler
  });
}); //document ready

Thanks in advance for any kind of your help and any help will be highly appreciated!



source https://stackoverflow.com/questions/67756431/how-to-fix-uncaught-syntaxerror-unexpected-end-of-json-input-at-json-parse-an

Comments

Popular posts from this blog

ValueError: X has 10 features, but LinearRegression is expecting 1 features as input

So, I am trying to predict the model but its throwing error like it has 10 features but it expacts only 1. So I am confused can anyone help me with it? more importantly its not working for me when my friend runs it. It works perfectly fine dose anyone know the reason about it? cv = KFold(n_splits = 10) all_loss = [] for i in range(9): # 1st for loop over polynomial orders poly_order = i X_train = make_polynomial(x, poly_order) loss_at_order = [] # initiate a set to collect loss for CV for train_index, test_index in cv.split(X_train): print('TRAIN:', train_index, 'TEST:', test_index) X_train_cv, X_test_cv = X_train[train_index], X_test[test_index] t_train_cv, t_test_cv = t[train_index], t[test_index] reg.fit(X_train_cv, t_train_cv) loss_at_order.append(np.mean((t_test_cv - reg.predict(X_test_cv))**2)) # collect loss at fold all_loss.append(np.mean(loss_at_order)) # collect loss at order plt.plot(np.log(al...

Sorting large arrays of big numeric stings

I was solving bigSorting() problem from hackerrank: Consider an array of numeric strings where each string is a positive number with anywhere from to digits. Sort the array's elements in non-decreasing, or ascending order of their integer values and return the sorted array. I know it works as follows: def bigSorting(unsorted): return sorted(unsorted, key=int) But I didnt guess this approach earlier. Initially I tried below: def bigSorting(unsorted): int_unsorted = [int(i) for i in unsorted] int_sorted = sorted(int_unsorted) return [str(i) for i in int_sorted] However, for some of the test cases, it was showing time limit exceeded. Why is it so? PS: I dont know exactly what those test cases were as hacker rank does not reveal all test cases. source https://stackoverflow.com/questions/73007397/sorting-large-arrays-of-big-numeric-stings

How to load Javascript with imported modules?

I am trying to import modules from tensorflowjs, and below is my code. test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title </head> <body> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script> <script type="module" src="./test.js"></script> </body> </html> test.js import * as tf from "./node_modules/@tensorflow/tfjs"; import {loadGraphModel} from "./node_modules/@tensorflow/tfjs-converter"; const MODEL_URL = './model.json'; const model = await loadGraphModel(MODEL_URL); const cat = document.getElementById('cat'); model.execute(tf.browser.fromPixels(cat)); Besides, I run the server using python -m http.server in my command prompt(Windows 10), and this is the error prompt in the console log of my browser: Failed to loa...