Eu tenho um formulário de registro e estou usando $.ajax
para enviá-lo.
Este é o meu pedido AJAX:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
No meu arquivo submit1.php , verifico a existência de campos de endereço de email e nome de usuário no banco de dados. Desejo exibir uma mensagem de erro se esses valores existirem sem uma atualização da página .
Como posso adicionar isso ao retorno de chamada bem- sucedido da minha solicitação AJAX?
javascript
jquery
ajax
codingbbq
fonte
fonte
Respostas:
O resultado provavelmente não está no formato JSON; portanto, quando o jQuery tenta analisá-lo como tal, ele falha. Você pode capturar o erro com a
error:
função de retorno de chamada.Você parece não precisar de JSON nessa função de qualquer maneira, portanto, você também pode remover a
dataType: 'json'
linha.fonte
dataType:'text'
dataType:
não for especificado, masurl:
terminar.json
.$.post
nome alternativo de fornecimentojson
como tipo de dados sem json real vindo de servidor não acionasuccess
callbackEmbora o problema já esteja resolvido, acrescento isso na esperança de ajudar outros.
Cometi o erro e tentei usar uma função diretamente assim (sucesso: OnSuccess (productID)). Mas você precisa passar uma função anônima primeiro:
Se você não usar uma função anônima como um wrapper, o OnSuccess será chamado mesmo se o serviço da web retornar uma exceção.
fonte
Tentei remover a linha dataType e não funcionou para mim. Eu resolvi o problema usando "complete" em vez de "success" como retorno de chamada. O retorno de chamada de sucesso ainda falha no IE, mas, como meu script é executado e concluído de qualquer maneira, é com isso que eu me importo.
no jQuery 1.5, você também pode fazê-lo assim.
fonte
complete
sempre será chamado, independentemente se a chamada ajax foi bem-sucedida ou não, esuccess
somente será chamado se o servidor da web responder com um200 OK
cabeçalho HTTP (está tudo bem).Certifique-se de não imprimir (eco ou imprimir) qualquer texto / dados antes de gerar seus dados formatados em JSON em seu arquivo PHP. Isso poderia explicar que você recebe 200 OK, mas seu evento de sucesso ainda falha no seu javascript. Você pode verificar o que seu script está recebendo, verificando a seção "Rede - Resposta" no firebug para o POST submit1.php.
fonte
Coloque um
alert()
no seusuccess
retorno de chamada para garantir que ele esteja sendo chamado.Caso contrário, é simplesmente porque a solicitação não foi bem-sucedida, mesmo que você consiga acessar o servidor. Causas razoáveis podem ser que um tempo limite expire, ou algo no seu código php lança uma exceção.
Instale o complemento do firebug para o firefox, se você ainda não o fez, e inspecione o retorno de chamada AJAX. Você poderá ver a resposta e se ela recebe ou não uma resposta bem-sucedida (200 OK). Você também pode colocar outro
alert()
nocomplete
retorno de chamada, que definitivamente deve ser chamado.fonte
success
, não será um sucesso. como a resposta é 200 OK, a resposta de Tatu parece razoável, mas, para solucionar problemas adicionais, você pode usar outro evento, chamadocomplete
sempre invocado, independentemente de uma solicitação ter ou não êxito (success
apenas acontece se a solicitação for bem-sucedida).complete: function (xhr, status) { alert('complete: '+status); }
Eu tive o mesmo problema. isso acontece porque o tipo de dados
javascript
esperado éjson
retornado. mas se você usa eco ou imprime no seu php, esta situação ocorre. se você usar aecho
funçãophp
para retornar dados, basta remover odataType : "json"
trabalho muito bem.fonte
Eu estava retornando JSON válido, obtendo uma resposta de 200 no meu retorno de chamada "completo" e podia vê-lo no console da rede chrome ... MAS eu não havia especificado
uma vez eu fiz, ao contrário da "resposta aceita", que realmente corrigiu o problema.
fonte
Estou usando XML para levar o resultado de volta do php no servidor para a página da web e tive o mesmo comportamento.
No meu caso, o motivo foi o fato de a marca de fechamento não corresponder à marca de abertura.
fonte
Eu tive esse problema usando uma função ajax para recuperar a senha do usuário do Magento. O evento de sucesso não estava sendo disparado, então percebi que havia dois erros:
Portanto, toda vez que eu tentava usar json_eoncde () para codificar a matriz de retorno, a função não estava funcionando porque um de seus índices possuía caracteres não utf, a maioria deles acentuando as palavras em português do Brasil.
fonte
Eu tentei retornar a string do controlador, mas por que o controle retornando ao bloco de erro não foi bem-sucedido no ajax
fonte
Eu enfrentei o mesmo problema ao consultar o controlador que não retorna resposta de sucesso, quando modificado meu controlador para retornar o problema da mensagem de sucesso foi resolvido. note usando o framework Lavalite. antes:
isso funcionou para mim
fonte
Eu tive o mesmo problema que resolvi dessa maneira: Meu ajax:
Está bem. O problema não está no json, mas apenas na resposta php. Antes: minha resposta php foi:
Agora:
Agora meu sucesso está funcionando. PS. Desculpe se algo está errado, mas é o meu primeiro comentário neste fórum :)
fonte
no meu caso, o erro foi este no lado do servidor e, por esse motivo, estava retornando um html
fonte
Adicione retorno de chamada 'error' (assim como 'success') desta maneira:
Então, no meu caso, eu vi no console:
fonte
Você deve declarar êxito e retorno de chamada de erro. Adicionando
deve corrigir o problema
fonte
O retorno de chamada de sucesso leva dois argumentos:
Verifique também se
submit1.php
define o cabeçalho do tipo de conteúdo apropriado:application/json
fonte
success
dois argumentos parece completamente irrelevante para a questão. Você pode passar qualquer quantidade de parâmetros para uma função javascript, independentemente de quantos ele aceita em sua declaração, então essa definitivamente não é a causa desses problemas e, como nenhum dos valoresdata
outextStatus
está sendo usado no retorno de chamada bem-sucedido, parece haver não há uma boa razão para declará-los na função.