здравствуйте, пытаюсь сделать отправку данных в месте с файлом, всё отправляются нормально, но решил сделать сообщение с сервера клиенту, об ошибке или об успешной передаче, собственно вот код
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="jquery.form.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
$(document).ready(function() {
$("#frm").ajaxForm({
// dataType: "json",
beforeSubmit: function(dataFrm, obj, option) {
$("#result_load").show();
$("#result_load").html("Загрузка...");
$("#go").enable(false); // Деактивируем кнопку
},
success: function(data){
var res = JSON.parse(data);
if (res['err']=='1'){
$("#result_load").hide();
$("#result").html(res['msg']);
$("#go").enable(true); // Делаем кнопку активной
}else{
$("#result_load").hide();
$("#result").html(res['msg']);
$("#go").enable(true); // Делаем кнопку активной
}
},
clearForm: true // Устанавливаем значения по умолчанию
});
});
//-->
</script>
<div id="result_load"></div>
<form action="upload.php" id="frm" method="POST" enctype="multipart/form-data">
<input type="text" name="txt1"><br>
<input type="text" name="txt2" value="Текст"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="30000000">
<input type="file" name="file_name">
<input type="submit" name="go" id="go" value="Загрузить файл">
</form>
<b>Ответ сервера:</b><br>
<div id="result"></div>
<?php
header('Content-Type: text/html; charset=utf-8');
$res = array();
if($_POST['txt1'] == ''){
$res['msg'][] = 'Поле txt1 не заполнено!';
}
if($_POST['txt2'] == ''){
$res['msg'][] = 'Поле txt2 не заполнено!';
}
if (!isset($_FILES['file_name']))
{
$res['msg'][] = 'Файл не выбран';
}elseif($_FILES['file_name']['error'] == 0 && $_FILES['file_name']['size'] > 0 && $_FILES['file_name']['size'] < 30000000) {
$path = "C:/wamp/www/jquery/form/";
$path .= basename($_FILES['file_name']['name']);
$tmp = $_FILES['file_name']['tmp_name'];
if (!@move_uploaded_file($tmp, $path))
{
$res['msg'][] = 'Ошибка при копировании файла';
}
}else{
$res['msg'][] = 'Ошибка при загрузке. Код: ' . $_FILES['file_name']['error'];
}
$output = '';
$res2 = array();
if( @sizeof($res['msg']) > 0 ){
foreach(@$res['msg'] as $index => $val)
{
$output .= $val.'<br>';
}
$res2['msg'] = $output;
$res2['err'] = '1';
}else{
$res2['msg'] = 'Даные были сохранены успешно';
$res2['err'] = '0';
}
echo '{"msg":"'.$res2['msg'].'","err":"'.$res2['err'].'"}';
?>
проверил в FireFox 3.6 и Chrome всё работает нормально, а в IE8 выдаёт такую ошибку
Код:
|
Сообщение: 'JSON' - определение отсутствует
Строка: 23
Символ: 7
Код: 0
URI-код: http://localhost/jquery/form/index.php |
23 строка это: var res = JSON.parse(data);
в опере 10 выдаёт
Код:
|
{"msg":"Поле txt1 не заполнено!<br>Поле txt2 не заполнено!<br>","err":"1"} |
подскажите что делаю не так?
каким образом определить JSON то что просит IE сделать?
ещё, если убераю коментарии в коде JS в этой строчке
// dataType: "json",
то но водном браузере не работает