Modifiquei o código usando JSON, conforme você sugeriu.
Utilizei a extensão:
CarJson
O código busca os valores corretamente e exibe na div.
Necessito agora, joga-los para os campos inputs do formulário ( num_requisicao_inicial_medico e num_requisicao_final_medico) e estou com dificuldades. Esses campos sim fazem parte do formulário e vão ser gravados no banco.
O parametro ‘data’ está comentando pois com ele habilitado para de aparecer os dados buscados na div
O código atualmente está:
_form.php
<div class="row">
<?Php
echo CHtml::label('Faixas | Séries | Quantidades Disponíveis', 'series_disponiveis');
//empty since it will be filled by the other dropdown
echo CHtml::dropDownList('series_disponiveis','', array('empty' => 'Escolha um Tipo de Receita',
));
echo CHtml::button('Exibir Faixa', array(
'ajax' => array(
'type' => 'POST',
'url' => CController::createUrl('Requisicao/buscaultimo'),
// 'data' => array(
// 'quantidadefolhas' => 'js:$("#Requisicao_qtde_folhas_requisicao").val()',
// 'seriesdisponiveis' => 'js:$("select#series_disponiveis option:selected").val()',
//
// ),
'update' => '#req_dados_dinamicos',
// 'success' => 'function(data) {
// var primeirainicial = 0+$("#primeira_requisicao_inicial").val();
// var primeirafinal = 0+$("#primeira_requisicao_final").val();
// var proximainicial = 0+$("#Requisicao_proxima_requisicao_inicial").val();
// var proximafinal = 0+$("#Requisicao_proxima_requisicao_final").val();
// var seriesdisponiveis = $("#series_disponiveis").val();
//
// var quantidadefolhas = $("#Requisicao_qtde_folhas_requisicao").val();
// var quantidadedisponivel = $("#quantidadedisponivel").val();
// var quantidadedisponivel2= series_disponiveis.options[series_disponiveis.selectedIndex].text;
// var quebra=quantidadedisponivel2.split("|");
// alert("Primeira inicial: "+primeirainicial+ "Primeira final: "+primeirafinal+ "Proxima inicial: "+proximainicial+ "Proxima final: "+proximafinal);
// if(parseInt(quantidadefolhas)>parseInt(quebra[2])+1){
// alert("Quantidade de folhas requisitada"+quantidadefolhas+" deve ser menor ou igual a quantidade disponível"+quebra[2]);
// }
//
// if(isNaN(primeirainicial) && isNaN(primeirafinal)){
// alert("primeira requisicao");
// var numinicialrequisicao = proximainicial;
// var numfinalrequisicao = proximafinal;
//
// }else{
//
// var numinicialrequisicao = primeirainicial;
// var numfinalrequisicao = primeirafinal;
//
// }
// alert(numinicialrequisicao + " " + numfinalrequisicao + " " + seriesdisponiveis);
// $("#Requisicao_num_requisicao_inicial_medico").val(numinicialrequisicao);
// $("#Requisicao_num_requisicao_final_medico").val(numfinalrequisicao);
// $("#Requisicao_id_num_sequencial").val(seriesdisponiveis);
//
//
// }
// '
)
)
);
?>
</div>
<div id="req_dados_dinamicos" class="row">
</div>
<div class="row">
<?php echo $form->labelEx($model,'num_requisicao_inicial_medico'); ?>
<?php echo $form->textField($model,'num_requisicao_inicial_medico', array('readonly' => true, 'size' => 8, 'maxlength'=><img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />); ?>
<?php echo $form->error($model,'num_requisicao_inicial_medico'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'num_requisicao_final_medico'); ?>
<?php echo $form->textField($model,'num_requisicao_final_medico', array('readonly' => true, 'size' => 8, 'maxlength'=><img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />); ?>
<?php echo $form->error($model,'num_requisicao_final_medico'); ?>
</div>
RequisicaoController.php
public function actionbuscaultimo()
{
$parametro = ((int) $_POST['Requisicao']['qtde_folhas_requisicao']);
$parametro2 = (int)$_POST['series_disponiveis'];
Yii::import('application.extensions.json.CArJSON');
$requisicoes = Requisicao::model()->findBySql("SELECT (MAX(req.num_requisicao_final_medico)+1) as proxima_requisicao_inicial, (MAX(req.num_requisicao_final_medico)+:keyword) as proxima_requisicao_final,
ns.num_sequencial_inicial as primeira_requisicao_inicial, ns.num_sequencial_inicial+:keyword-1 as primeira_requisicao_final,
MAX(ns.num_sequencial_final) - MAX(req.num_requisicao_final_medico) as quantidade_disponivel,
ns.num_sequencial_final - ns.num_sequencial_inicial as quantidade_disponivel_sem_requisicao
FROM
sch_scspm.tb_num_sequencial ns
LEFT JOIN sch_scspm.tb_requisicao req
ON
(ns.id_num_sequencial = req.id_num_sequencial)
WHERE
ns.id_num_sequencial = :keyword2
GROUP BY ns.num_sequencial_inicial, ns.num_sequencial_final", array(':keyword' => $parametro, ':keyword2' => $parametro2));
$json = new CArJSON();
// Define which relations do you want to load
$relations = array('medico', 'clinica', 'grafica');
// Define which attributes, foreach relations do you want to load
// root denote attributes for the main model
if ($requisicoes->proxima_requisicao_inicial == NULL || $requisicoes->proxima_requisicao_final == NULL) {
$attributes = array(
'root' => array('primeira_requisicao_inicial','primeira_requisicao_final')
);
} else {
$attributes = array(
'root' => array('proxima_requisicao_inicial', 'proxima_requisicao_final'),
);
}
echo $json->toJSON($requisicoes, $relations, $attributes);
}
Se estiver retornando os valores (5431881 e 5431890_ no console do firebug, ai é somente colocar esse valores dentro do $(’#IDseuinput’).val(data.attributes.*)
Tentei mudar para imprimir apenas com o nome do campo :
proxima_requisicao_inicial e proxima_requisicao_final e não consegui.
Teria que mudar algo no método controller? Na documentação do carjson não encontrei muita coisa referente a esse método. Me parece que ele sempre tem que retornar os valores dessa forma model + relações + atributos pelo menos nesse método toJSON.
Não estou sabendo qual sintaxe poderia pegar cada campo.
Mas estou continuando a tentar aqui.
Me parece que tenho não posso acessar o campo direto, tenho que percorrer antes.
public function actionbuscaultimo()
{
$parametro = ((int) $_POST['quantidadefolhas']);
$parametro2 = ((int)$_POST['series_disponiveis']);
$requisicoes = Requisicao::model()->findBySql("SELECT (MAX(req.num_requisicao_final_medico)+1) as proxima_requisicao_inicial, (MAX(req.num_requisicao_final_medico)+:keyword) as proxima_requisicao_final,
ns.num_sequencial_inicial as primeira_requisicao_inicial, ns.num_sequencial_inicial+:keyword-1 as primeira_requisicao_final,
MAX(ns.num_sequencial_final) - MAX(req.num_requisicao_final_medico) as quantidade_disponivel,
ns.num_sequencial_final - ns.num_sequencial_inicial as quantidade_disponivel_sem_requisicao
FROM
sch_scspm.tb_num_sequencial ns
LEFT JOIN sch_scspm.tb_requisicao req
ON
(ns.id_num_sequencial = req.id_num_sequencial)
WHERE
ns.id_num_sequencial = :keyword2
GROUP BY ns.num_sequencial_inicial, ns.num_sequencial_final", array(':keyword' => $parametro, ':keyword2' => $parametro2));
if($requisicoes != null){
echo CJSON::encode($requisicoes->attributes);
}
die;
}