$data= json_encode ($otvet); не приходит на клиент.
|
Цитата:
|
json_encode не работает или работает но не так
|
На изображении вашем, это не JSON, а результат работы hrint_r(array), а вот json_encode() этого массива будет выглядеть именно как [9176,1234,10].
Привести к виду json_encode([9176, 1234, 10])... Это не приведение к виду, а объявление массива в аргументе функции json_encode(), причем такое объявление возможно только в версии РНР не ниже 5.4, в младших необходимо объявлять массив как array(9176, 1234, 10). Вам же этого не требуется вообще, это я в пояснении так написал, у вас массив для ответа клиенту это $otvet, хотя уж лучше отучать себя от такого "жаргона". Вы не показываете кода сервера, код клиента только частично, не описываете проблему, значит и ответить затруднительно. |
серверная часть
<? require 'function.php'; header("Content-type: text/plain; charset=utf-8"); $errors = array(); $otvet=array(); if (isset($_POST['int'])) {$str = $_POST['int'];} if (isset($_POST['hidden'])) { if(true==empty($_POST['hidden'])) { /* echo 'Перепенная пустая!'; */ $a=str_split(gen()); $string = implode("", $a); $otvet[]= $string; } else { /* echo ' не пустая!'; */ /* var_dump (isset($_POST['hidden'])); */ $iskomoe_chislo = $_POST['hidden']; /* print_r ($iskomoe_chislo); */ $otvet[]=$iskomoe_chislo; } } $arr1 = str_split($str); $result = array_unique($arr1); if (isset($arr1)) { $length_arr1=count ($arr1); } if (isset($result)) { $length_result=count ($result); } if ($length_result<$length_arr1) { $errors[] ="Нельзя вводить повторяющиеся цифры!!"; } if(isset($errors[0])){ echo $errors[0]; return false; } $otvet[]= $str; $otvet[]=buki($a,$arr1); print_r ($otvet); $data= json_encode ($otvet); ?> клиентская $(document).ready(function(){ jQuery.validator.addMethod( 'regexp', function(value, element, regexp) { var re = new RegExp(regexp); return this.optional(element) || re.test(value); }, "" ); $("#formdata").validate({ rules: { int: { required: true, minlength: 4, maxlength: 4, number : true, regexp: '^[1-9]{1}[0-9]*$' } }, messages:{ int:{ required: "поле не заполнено или заполнено не верно", minlength: "в поле должно быть минимум 4 символа", maxlength: "В поле должно быть максимум 4 символа", number : "В поле должны быть только цифры", regexp: "Число не должно начинаться на ноль!!" } }, submitHandler: function() { //это обработчик нажатия кнопки ОТПРАВИТЬ var data = $("#formdata").serialize(); $.ajax({// инициализируем ajax запрос type: 'POST', // отправляем в POST формате url: '../obrabot.php', // путь до обработчика, у нас он лежит в той же папке data: data, // данные для отправки /* cache: false, */ success: function (data) { if (data ) { alert("Пришли данные " + data); if (data=='Нельзя вводить повторяющиеся цифры!!') { $('#error').html(data).fadeIn(200); $('#formdata')[0].reset(); $('#error').html(data).fadeOut(2000); } else { alert (data.length); $('input[type="hidden"]').val(data); $("#p1").text(data[2]); data.length=0; } } else { alert("no ok"); } } }); return false; } }); }); |
data.length=0;
пытался обнулить массив ,чтобы не происходило накопление массивов, но не работает |
data приходит как на скриншоте
|
а еще 2 функции в обработчике gen, buki вынесены в другой файл
|
Вспомнил, вы уже писал подобный пост. Если вы работаете только с числами и их значения должны быть нулевыми, то POST принимать надо с приведения его значений к iteger:
$_POST = array_map('intval', $_POST) А далее проверка без всяких if(true==empty($_POST['hidden'])) и дальнейших if (isset($arr1))... Работая с JSON, укажите методу .ajax тип данных dataType : "json" Но в этом случае РНР сценарий должен возвращать именно этот формат, а не смесь, к примеру: echo $errors[0] - а зачем тогда Error массив, если возвращается только первый его элемент при ошибке? А если возвращается массив ошибок, то почему не в json формате? return false - это из чего возврат, если это не функция и не цикл? |
dataType : "json" , я же отправляю не в json формате.
|
Часовой пояс GMT +3, время: 09:09. |