простая ошибка синтаксического анализа с моей формой отправки с использованием ajax и загрузки файла - PullRequest
0 голосов
/ 04 октября 2018

Я могу загрузить файл в нужную директорию, чтобы эта часть работала, но я не уверен, почему у меня возникает ошибка синтаксического анализа в консоли js в chrome.Из-за этой ошибки мой нижний javascript не будет выполняться, и мне нужно это сделать.

Вот ajax:

var files;

// Add events
$('input[type=file]').on('change', prepareUpload);

// Grab the files and set them to our variable
function prepareUpload(event)
{
  files = event.target.files;
}

$('form').on('submit', uploadFiles);

// Catch the form submit and upload the files
function uploadFiles(event)
{
  event.stopPropagation(); // Stop stuff happening
  event.preventDefault(); // Totally stop stuff happening

// START A LOADING SPINNER HERE

// Create a formdata object and add the files
var data = new FormData();
$.each(files, function(key, value)
{
    data.append(key, value);
});

$.ajax({
    url: 'submit.php?files',
    type: 'POST',
    data: data,
    cache: false,
    dataType: 'json',
    processData: false, // Don't process the files
    contentType: false, // Set content type to false as jQuery will tell the server its a query string request
    success: function(data, textStatus, jqXHR)
    {
        alert(data);
        script = $(data).text();
        $.globalEval(script);
        if(typeof data.error === 'undefined')
        {
            // Success so call function to process the form
            submitForm(event, data);
        }
        else
        {
            // Handle errors here
            console.log('ERRORS: ' + data.error);
        }

    },
    error: function(jqXHR, textStatus, errorThrown)
    {
        // Handle errors here
        console.log('ERRORS: ' + textStatus);
        // STOP LOADING SPINNER
    }
});
}

Вот HTML:

<?php 
echo '<span class="new_profile_save_upload_image_span"><img     src="'.$url_root.'/images/615721406-612x612.jpg"/ class="new_profile_save_upload_image_img"></span>';
?>
<form action="" method="post" enctype="multipart/form-data" name="new_profile_save_upload_image_input_form" id="new_profile_save_upload_image_input_form">
<input type="file" id="new_profile_save_upload_image_input" name="new_profile_save_upload_image_input" multiple="" accept="image/x-png,image/gif,image/jpeg"/>
<input type="submit" value="Upload Image" name="submit">
</form>

А вот php:

<?php 

// get mysqli db connection string
$mysqli = new mysqli("localhost", "psych_admin", "asd123", "psych");
if($mysqli->connect_error){
    exit('Error db');
}

// Get theme settings and theme colours and assign the theme colour to the 
theme name
$stmt = $mysqli->prepare("SELECT name FROM user_profiles WHERE rowid=(SELECT 
    MAX(rowid) FROM user_profiles);");
$stmt->execute();
$result = $stmt->get_result();
while($row_1 = $result->fetch_assoc())
{
    $arr_1[] = $row_1;
}
foreach($arr_1 as $arrs_1)
{
    $username = $arrs_1['name'];
}

$data = array();

if(isset($_GET['files']))
{  
    $error = false;
    $files = array();

    // Make dir for file uploads to be held
    if (!file_exists(''.dirname(__FILE__) . '/content/profiles/'.$username.'/avatar')) 
    {
        mkdir(''.dirname(__FILE__) . '/content/profiles/'.$username.'/avatar', 0777, true);
    }
    $uploaddir = './content/profiles/'.$username.'/avatar/';
    foreach($_FILES as $file)
    {
        if(move_uploaded_file($file['tmp_name'], $uploaddir .basename($file['name'])))
        {
            $files[] = $uploaddir .$file['name'];
        }
        else
        {
            $error = true;
        }
    }
    $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files);
}
else
{
    $data = array('success' => 'Form was submitted', 'formData' => $_POST);
}

echo json_encode($data);

?>

<script>
var scope1 = '<?php echo $url_root;?>';
var scope2 = '<?php echo $username;?>';
var scope3 = '<?php echo $file['name'];?>';
var new_profile_save_upload_image_span_data = '<img src="' + scope1 + '/content/profiles/' + scope2 + '/avatar/' + scope3 + '"     class="new_profile_save_upload_image_img">';
$('.new_profile_save_upload_image_span').empty();
$('.new_profile_save_upload_image_span').append(new_profile_save_upload_image_span_data);

</script>

alert (data), похоже, не выскакивает, так что до этого выполнения что-то не так.

Я попробовал этот код просто с «submit.php», но, похоже, он не работает без добавления «файлов».

Также правильно ли указано имя файла?Должно ли имя файла быть $ file ['name'] в php?Я пытаюсь получить имя файла в виде строки и поместить его, когда изображение по умолчанию (как изображение, которое будет отображаться), используя HTML-тег img и вставляя его с помощью jquery, как вы можете видеть внизу под.

Ajax должен выполнить этот скрипт внизу, но это не из-за ошибки.

Также есть ли лучший способ написания написанных мной нижних сценариев jquery?

Ошибка, которую я получаю:

ERRORS: Syntax Error: Unexpected Token < in JSON at position 103

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Лучше использовать блок try-catch в своем PHP-коде и отправлять статус с ответом, установленным в true или false.Также отправьте переменные $url_root и $username в объекте JSON.

См. это руководство для начинающих по загрузке изображений с помощью PHP и AJAX , чтобы узнать все о создании обработчика AJAX, проверке,сохранение и отправка ответа обратно клиентской стороне.

0 голосов
/ 04 октября 2018

Если вы хотите вернуть JSON и HTML одновременно, вы можете поместить HTML в элемент массива $data.

<?php 

// get mysqli db connection string
$mysqli = new mysqli("localhost", "psych_admin", "asd123", "psych");
if($mysqli->connect_error){
    exit('Error db');
}

// Get theme settings and theme colours and assign the theme colour to the 
theme name
$stmt = $mysqli->prepare("SELECT name FROM user_profiles WHERE rowid=(SELECT 
    MAX(rowid) FROM user_profiles);");
$stmt->execute();
$result = $stmt->get_result();
while($row_1 = $result->fetch_assoc())
{
    $arr_1[] = $row_1;
}
foreach($arr_1 as $arrs_1)
{
    $username = $arrs_1['name'];
}

$data = array();

if(isset($_GET['files']))
{  
    $error = false;
    $files = array();

    // Make dir for file uploads to be held
    if (!file_exists(''.dirname(__FILE__) . '/content/profiles/'.$username.'/avatar')) 
    {
        mkdir(''.dirname(__FILE__) . '/content/profiles/'.$username.'/avatar', 0777, true);
    }
    $uploaddir = './content/profiles/'.$username.'/avatar/';
    foreach($_FILES as $file)
    {
        if(move_uploaded_file($file['tmp_name'], $uploaddir .basename($file['name'])))
        {
            $files[] = $uploaddir .$file['name'];
        }
        else
        {
            $error = true;
        }
    }
    $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files);
}
else
{
    $data = array('success' => 'Form was submitted', 'formData' => $_POST);
    $data['html'] = <<<EOS
<script>
var scope1 = '$url_root';
var scope2 = '$username';
var scope3 = '{$file['name']}';
var new_profile_save_upload_image_span_data = '<img src="' + scope1 + '/content/profiles/' + scope2 + '/avatar/' + scope3 + '"     class="new_profile_save_upload_image_img">';
\$('.new_profile_save_upload_image_span').empty();
\$('.new_profile_save_upload_image_span').append(new_profile_save_upload_image_span_data);

</script>
EOS;

}

echo json_encode($data);

?>

Затем в JavaScript вы делаете:

script = $(data.html).text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...