javascript - working - Evento de sucesso do Ajax não funciona




jquery ajax success error (10)

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 eu verifico a existência de campos de endereço de e -mail e nome de usuário no banco de dados. Desejo exibir uma mensagem de erro se esse valor existir sem uma atualização de página .

Como posso adicionar isso ao retorno de chamada de sucesso da minha solicitação AJAX?


Adicione callback de 'erro' (assim como 'sucesso') desta forma:

$.ajax({
   type: 'POST',
   url: 'submit1.php',
   data: $("#regist").serialize(),
   dataType: 'json',
   success: function() {
      $("#loading").append("<h2>you are here</h2>");
   },
   error: function(jqXhr, textStatus, errorMessage){
      console.log("Error: ", errorMessage);
   }
});

Então, no meu caso eu vi no console:

Error:  SyntaxError: Unexpected end of JSON input
  at parse (<anonymous>), ..., etc.

Coloque um alert() em seu callback de success para ter certeza de que ele está sendo chamado.

Se não for, simplesmente porque a solicitação não foi bem-sucedida, mesmo que você consiga acertar o servidor. Causas razoáveis ​​podem ser que um tempo limite expire, ou algo no seu código php gera uma exceção.

Instale o addon do firebug para o firefox, se ainda não o fez, e inspecione o callback do AJAX. Você poderá ver a resposta e se recebe ou não uma resposta bem-sucedida (200 OK). Você também pode colocar outro alert() no retorno de chamada complete , que definitivamente deve ser invocado.


Estou usando XML para transportar o resultado de volta do php no servidor para a página da web e tive o mesmo comportamento.

No meu caso, a razão era que a tag de fechamento não correspondia à tag de abertura.

<?php
....
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <result>
        <status>$status</status>
        <OPENING_TAG>$message</CLOSING_TAG>
    </result>";
?>

Eu enfrentei o mesmo problema ao consultar controlador que não retorna a resposta de sucesso, quando modificado meu controlador para retornar o problema de mensagem de sucesso foi resolvido. observe usando o framework Lavalite. antes:

public function Activity($id)
    {
        $data=getData();
        return
            $this->response->title('title')
                ->layout('layout')
                ->data(compact('data'))
                ->view('view')
                ->output();
    }
after code looks like:
    try {
            $attributes = $request->all();
            //do something
            return $this->response->message('')
                ->code(204)
                ->status('success')
                ->url('url'. $data->id)
                ->redirect();
        } catch (Exception $e) {
            return $this->response->message($e->getMessage())
                ->code(400)
                ->status('error')
                ->url('nothing Wrong')
                ->redirect()
        }

isso funcionou para mim


Eu tentei remover a linha dataType e não funcionou para mim. Eu contornei o problema usando "completo" em vez de "sucesso" como o retorno de chamada. O callback de sucesso ainda falha no IE, mas como meu script é executado e completo, é tudo o que me interessa.

$.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: someData,
    complete: function(jqXHR) {
       if(jqXHR.readyState === 4) {
          ... run some code ... 
       }   
    }        
 });

no jQuery 1.5 você também pode fazer assim.

var ajax = $.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: 'someData'
});
ajax.complete(function(jqXHR){
    if(jqXHR.readyState === 4) {
        ... run some code ... 
    }
});

Eu tentei retornar string do controlador, mas porque o controle retornando ao bloco de erro não no sucesso do ajax

var sownum="aa";
$.ajax({
    type : "POST",
    contentType : 'application/json; charset=utf-8',
    dataType : "JSON",
    url : 'updateSowDetails.html?sownum=' + sownum,
    success : function() {
        alert("Wrong username");
    },
    error : function(request, status, error) {

        var val = request.responseText;
        alert("error"+val);
    }
});

Eu tive o mesmo problema que resolvi assim: Meu ajax:

event.preventDefault();
$.ajax('file.php', {
method: 'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({tab}), 
success: function(php_response){
            if (php_response == 'item') 
                {
                    console.log('it works');
                }
            }
        })

Está bem. O problema não é com json, mas apenas a resposta do php. Antes: minha resposta do php era:

echo 'item';

Agora:

$variable = 'item';
 echo json.encode($variable);

Agora meu sucesso está funcionando. PS. Desculpe se algo está errado, mas é o meu primeiro comentário neste fórum :)


Eu tive o mesmo problema. isso acontece porque o javascript espera o tipo de dados json nos dados de retorno. mas se você usar echo ou imprimir no seu php esta situação ocorrerá. se você usar a função echo no php para retornar dados, simplesmente remova o dataType : "json" funcionando muito bem.


O resultado provavelmente não está no formato JSON, portanto, quando o jQuery tenta analisá-lo como tal, ele falha. Você pode pegar o erro com error: função de retorno de chamada.

Você não parece precisar de JSON nessa função, então você também pode pegar a linha dataType: 'json' .


Verifique se você não está imprimindo (fazendo eco ou imprime) nenhum texto / dados antes de gerar seus dados formatados em JSON em seu arquivo PHP. Isso poderia explicar que você obtém um -sucessfull 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 "Network - Answer" no firebug para o POST submit1.php.







ajax