06.04.2015, 14:56
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
$data= json_encode ($otvet); не приходит на клиент.
|
|
06.04.2015, 15:02
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
Сообщение от laimas
|
Если json_encode([9176, 1234, 10]), то на клиенте тип ожидаемых данных должен быть указан как json, а в success: function (data) будет достаточно обычного цикла, например:
while(v = data.pop()) {
alert(v)
}
|
У меня json_encode на скриншоте показан. А как его к такому виду подогнать ([9176, 1234, 10]) ?
|
|
06.04.2015, 15:10
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
json_encode не работает или работает но не так
|
|
06.04.2015, 15:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
На изображении вашем, это не JSON, а результат работы hrint_r(array), а вот json_encode() этого массива будет выглядеть именно как [9176,1234,10].
Привести к виду json_encode([9176, 1234, 10])...
Это не приведение к виду, а объявление массива в аргументе функции json_encode(), причем такое объявление возможно только в версии РНР не ниже 5.4, в младших необходимо объявлять массив как array(9176, 1234, 10).
Вам же этого не требуется вообще, это я в пояснении так написал, у вас массив для ответа клиенту это $otvet, хотя уж лучше отучать себя от такого "жаргона".
Вы не показываете кода сервера, код клиента только частично, не описываете проблему, значит и ответить затруднительно.
|
|
06.04.2015, 15:40
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
серверная часть
<?
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;
}
});
});
|
|
06.04.2015, 15:42
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
data.length=0;
пытался обнулить массив ,чтобы не происходило накопление массивов, но не работает
Последний раз редактировалось Влад_имир, 06.04.2015 в 15:54.
|
|
06.04.2015, 15:49
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
data приходит как на скриншоте
|
|
06.04.2015, 15:51
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
а еще 2 функции в обработчике gen, buki вынесены в другой файл
|
|
06.04.2015, 16:01
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Вспомнил, вы уже писал подобный пост. Если вы работаете только с числами и их значения должны быть нулевыми, то 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 - это из чего возврат, если это не функция и не цикл?
|
|
06.04.2015, 16:09
|
Аспирант
|
|
Регистрация: 03.03.2015
Сообщений: 44
|
|
dataType : "json" , я же отправляю не в json формате.
|
|
|
|