Página 1 de 1

Ajuda Retorno Json

Enviado: 08 Fev 2015, 23:11
por eddyugi
Estou criando um formulario onde o usuario digita o nome e o email.
Tenho quase nenhum conhecimento sobre json e não estou consiguindo entender o retorno dos dados .
Código: Selecionar todos
<input type="hidden" name="product_id" value="<?php echo $product_id;  ?>" />
Nome:<br>
<input type="text" name="nomer"><br>
Email:<br>
<input type="text" name="emailr">
 <button type="button" id="button-Avise" data-toggle="tooltip" class="btn btn-default" >Aviseme quando</button>
<br>
<label id='retorno'></label>
Script que faz o post para validação no php:
Código: Selecionar todos
<script type="text/javascript">
$('#button-Avise').on('click', function() {
	$.ajax({		
		url: 'index.php?route=product/product/aviseme_quando',
		type: 'post',
		data: $('input[name=\'product_id\'], input[name=\'nomer\'], input[name=\'emailr\']'),		
		dataType: 'json',
		beforeSend: function() 
			{
			$('#retorno').html('antes de enviar');			
			},
			complete: function(json){
				if (json){
				$('#retorno').html('concluido');	
				
				}else {$('#retorno').html('nao retornou');}
			}
	});
});
</script>
O problema esta que a função "aviseme_quando" que nunca executa no post do json . Mas se eu acessar pelo link index.php?route=product/product/aviseme_quando ela entra na função e retorna normal..(a função ainda esta vazia somente retorna "ok")
Código: Selecionar todos
public function aviseme_quando(){
                 $json['success']  = 'ok';
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
           }

Resolvido

Enviado: 09 Fev 2015, 14:34
por eddyugi
Depois de muita pesquisa e diversas tentativas consigui fazer funcionar.
Colocando abaixo como ficou o codigo
Código: Selecionar todos
<!--javascript do botao do formulario -->
<script type="text/javascript">
$('#button-Avise').on('click', function() {
	$.ajax({		
		url: 'index.php?route=product/product/aviseme_quando',
		type: 'post',
		data: $('input[name=\'product_id\'], input[name=\'nomer\'], input[name=\'emailr\']'),		
		dataType: 'json',
		beforeSend: function() 
			{
			$('#retorno').html('antes de enviar');			
			},
			success: function(json) {
				$('#retorno').html("entrou no sucesso")
				if (json['mail']){
					$('#retorno').html(json['mail']);							
				}
					if (json['error']){
					$('#retorno').html(json['error']);							
				}
				if (json['success']){
					$('#retorno').html(json['success']);							
				}
											
					
			}
	});
});
e logo em seguida a função que valida os dados
Código: Selecionar todos
public function aviseme_quando(){
	if ($this->request->server['REQUEST_METHOD'] == 'POST') {
		//valida o codigo do produto
if  ( !preg_match( '/^[\w\n\s]+$/i' , $this->request->post['product_id'] )){
	$json['error'] = "Produto inValido!";
	}else{
		if ((utf8_strlen($this->request->post['nomer']) < 3) || (utf8_strlen($this->request->post['nomer']) > 25)|| ( !preg_match( '/^[\w\n\s]+$/i' , $this->request->post['nomer'] ) )) {
		$json['error'] = "Prencha um nome Valido!";
		} else {		
	//valida email
				if ((utf8_strlen($this->request->post['emailr']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $this->request->post['emailr'])) {
				$json['mail']  = "Preencha um email Valido!";
				}else {
						//inserir dados no banco(ainda nao criado)
						$json['success']  = "Sucesso";
						}
				}
	
	}//end else
		
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));

	
	}//end this
}//fim function
Talvez ajude alguém que também tenha dificuldade. Obrigado.