Ajax não enviar os dados [RESOLVIDO]

7 respostas
victormenegusso

Olá estou com um problema no meu script e não consigo encontrar o erro... se eu uso o botao de submit normal ele envia os dados mas se eu uso o botao que chama o ajax ele nao envia os dados

eu coloco isso para ver se foi enviado
<%= renderRequest.getAttribute("APA_12_32_28_666") %>
<%= renderRequest.getAttribute("APA_12_32_46_186") %>
<%= renderRequest.getAttribute("Erro") %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects/>
<script type="text/javascript">	
function sendAjaxFormSubmit(url, divid, formobj)
{
	url = url + getNoCacheValue(url);
	var req = getXMLHttpRequest();
	req.onreadystatechange = function(){ processResponse(req, divid) };
	req.open('POST', url, true);
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	var params = "productname="+formobj.productname.value+ "&productprice=" + formobj.productprice.value;
	req.setRequestHeader("Content-length", params.length);
	req.setRequestHeader("Connection", "close");
	req.send(params);
}
</script>

<%= renderRequest.getAttribute("APA_12_32_28_666") %>
<%= renderRequest.getAttribute("APA_12_32_46_186") %>
<%= renderRequest.getAttribute("Erro") %>


<form name="validate" id="validate" action="<portlet:actionURL></portlet:actionURL>" method="post">  
  
<label for="nome">Nome:</label>  
<input type="text" name="APA_12_32_46_186" />  
  
<label for="idade">Idade:</label>  
<input type="text" name="APA_12_32_28_666" />  
  
  
<input type="submit" value="Validar"/>  
<input type="button" name="submitform" value="Save" onclick="javascript:sendAjaxRequest('<portlet:actionURL></portlet:actionURL>', 'showdetails', document.productform)"/>
</form>

7 Respostas

O

Olá… eu não entendo de JSP… mas fiquei encucado com a função javascript que você está chamando (sendAjaxRequest) sendo que a que você criou ou declarou no seu arquivo (sendAjaxFormSubmit) é outra, está certo isso?

victormenegusso

eu nao tinha visto isso, é que antes eu usava ela com esse nome que esta no botao, vou arrumar de volta vlw, deve ser isso

victormenegusso

é mesmo ajustando o nome nao deu certo

O

Bem, visto isso acredito que você deva debuggar o javascript seu para ser se ele esta recebendo certinho os parametros e que a ordem e organização das linhas de código estão certas, pois se você diz que com o type submit no button ele funciona… ao meu ver sua função javascript pode, eu disse pode, ser que precise ser revista. Recomendo tirar linhas desnecessárias a chamada que você tá tentando fazer, deixando o minimo funcional pra testar o envio, aí depois colocar outras linhas.
Eu programo em Java pra web mas com uso velocity, struts e jquery, se você estiver usando uma estrutura de fluxo similar a minha faz o método que atenderia a chamada ajax retornar uma frase qualquer e dê um alert nesse retorno… até que consiga se comunicar com o seu método… enfim, como disse, degugue seu javascript pra ver se ele esta ou não se comunicando com o seu metodo alvo.

victormenegusso

Ae consegui... segue o codigo funcionando, tem algumas linha que não estão sendo ultilizadas foram colocadas para testes

<%@ page import="javax.portlet.ResourceURL" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects/>

<% 
ResourceURL resorceURL = renderResponse.createResourceURL();
%>
<script type="text/javascript">
	function AjaxRequest(url,target,params,highlightTarget){
		new Ajax.Updater(target, url, {method: 'GET', asynchronous:true, parameters:params})
		if(highlightTarget){
			new Effect.Highlight(document.getElementById(target));
		}
		
}
</script>
<%= renderRequest.getAttribute("APA_12_32_28_666") %>
<%= renderRequest.getAttribute("APA_12_32_46_186") %>
<%= renderRequest.getAttribute("Erro") %>
<form method='post' id="teste" name="teste" action="<portlet:actionURL></portlet:actionURL>" 
>
	<label for="nome">Nome:</label>  
<input type="text" name="APA_12_32_46_186" />  
  
<label for="idade">Idade:</label>  
<input type="text" name="APA_12_32_28_666" />  
  
  
<input type="submit" value="Validar"/>  
<input type="button" name="submitform" value="Save" onclick="AjaxRequest('<portlet:actionURL></portlet:actionURL>','repeat-div', form.serialize(this),true)"/>

</form>
O

rsrs… pelo jeito o problema estava no seu javascript mesmo, vc trocou toda a function. Largou mão de javascript puro e está usando que framework ajax? Descreve certinho sua solução, dizendo com o que vc tava trabalhando nesse “produto” que deu problema no código, pois assim fica bem completinho esse tópico e pode ser usado por outros como referencia ou solução de problemas similares.
Abraço!!!1

victormenegusso

Então, o problema era o seguinte, eu tenho um servidor Jboss, e em uma pagina dele eu tenho vários Portlets, e em cada Portlet eu tenho campos a preencher, mas toda vez que eu mandar um submit, eu não posso dar um refresh na tela.
a solução foi

Jsp

<%@ page import="javax.portlet.ResourceURL" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects/>
<script type="text/javascript">
	function AjaxRequest(url,target,params,highlightTarget){
		new Ajax.Updater(target, url, {method: 'GET', asynchronous:true, parameters:params})
		if(highlightTarget){
			new Effect.Highlight(document.getElementById(target));
		}
		
}
</script>
<%= renderRequest.getAttribute("APA_12_32_28_666") %>
<%= renderRequest.getAttribute("APA_12_32_46_186") %>
<%= renderRequest.getAttribute("Erro") %>
<form method='post' id="teste" name="teste" action="<portlet:actionURL></portlet:actionURL>" 
>
	<label for="nome">Nome:</label>  
<input type="text" name="APA_12_32_46_186" />  
  
<label for="idade">Idade:</label>  
<input type="text" name="APA_12_32_28_666" />  

<input type="button" name="submitform" value="Save" onclick="AjaxRequest('<portlet:actionURL></portlet:actionURL>','repeat-div', form.serialize(this),true)"/>

</form>

Java…

Código Padrão Portlet...
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, PortletSecurityException, IOException {
		this.APA_12_32_46_186 = request.getParameter("APA_12_32_46_186");
		this.APA_12_32_28_666 = request.getParameter("APA_12_32_28_666");
}
...

Qualquer duvidar mandar PM ou escrever aqui

Abraço

Apenas a parte do highlightTarget eu ainda não terminei,

Criado 1 de junho de 2010
Ultima resposta 2 de jun. de 2010
Respostas 7
Participantes 2