Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вытащить данные из массива (https://javascript.ru/forum/jquery/54916-vytashhit-dannye-iz-massiva.html)

Влад_имир 06.04.2015 14:56

$data= json_encode ($otvet); не приходит на клиент.

Влад_имир 06.04.2015 15:02

Цитата:

Сообщение от laimas (Сообщение 365201)
Если 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

json_encode не работает или работает но не так

laimas 06.04.2015 15:30

На изображении вашем, это не 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

серверная часть
<? 
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

data.length=0;
пытался обнулить массив ,чтобы не происходило накопление массивов, но не работает

Влад_имир 06.04.2015 15:49

data приходит как на скриншоте

Влад_имир 06.04.2015 15:51

а еще 2 функции в обработчике gen, buki вынесены в другой файл

laimas 06.04.2015 16:01

Вспомнил, вы уже писал подобный пост. Если вы работаете только с числами и их значения должны быть нулевыми, то 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

dataType : "json" , я же отправляю не в json формате.


Часовой пояс GMT +3, время: 09:09.