javascript - w3schools onreadystatechange




Solicitação Ajax retorna 200 OK, mas um evento de erro é acionado em vez de sucesso (11)

Implementei uma solicitação Ajax no meu site e estou chamando o ponto final de uma página da Web. Ele sempre retorna 200 OK , mas o jQuery executa o evento de erro. Eu tentei muitas coisas, mas não consegui descobrir o problema. Eu estou adicionando meu código abaixo:

Código jQuery

var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
function AjaxSucceeded(result) {
    alert("hello");
    alert(result.d);
}
function AjaxFailed(result) {
    alert("hello1");
    alert(result.status + ' ' + result.statusText);
}

Código C # para JqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

Eu preciso da seqüência ("Record deleted") após a exclusão bem-sucedida. Eu posso excluir o conteúdo, mas não estou recebendo esta mensagem. Isso está correto ou estou fazendo algo errado? Qual é a maneira correta de resolver esse problema?


Eu acho que sua página aspx não retorna um objeto JSON. Sua página deve fazer algo assim (page_load)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

Além disso, tente mudar o seu AjaxFailed:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus deve dar o tipo de erro que você está recebendo.


Eu enfrentei esse problema com uma biblioteca jQuery atualizada. Se o método de serviço não está retornando nada, isso significa que o tipo de retorno é void .

Então, na sua chamada Ajax, por favor mencione dataType='text' .

Isso resolverá o problema.


Eu tive alguma sorte com o uso de vários dataType separados por espaços ( jQuery.ajax ). Como em:

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'text json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

Eu tive o mesmo problema. Foi porque minha resposta JSON contém alguns caracteres especiais e o arquivo do servidor não foi codificado com UTF-8, portanto, a chamada do Ajax considerou que essa não era uma resposta JSON válida.


Isto é apenas para o registro desde que eu esbarrei neste post ao procurar uma solução para o meu problema que foi semelhante ao do OP.

No meu caso, minha solicitação do jQuery Ajax foi impedida de ser bem-sucedida devido à política de mesma origem no Chrome. Tudo foi resolvido quando modifiquei meu servidor (Node.js) para fazer:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

Literalmente me custou uma hora de bater a cabeça contra a parede. Estou me sentindo idiota ...


Outra coisa que estragou as coisas para mim foi usando localhost vez de 127.0.0.1 ou vice-versa. Aparentemente, o JavaScript não pode lidar com solicitações de um para o outro.


Seu script exige um retorno no tipo de dados JSON.

Tente isto:

private string test() {
  JavaScriptSerializer js = new JavaScriptSerializer();
 return js.Serialize("hello world");
}

Tente seguir

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: { "Operation" : "DeleteRow", 
            "TwitterId" : 1 },
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

OU

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

Use aspas duplas em vez de aspas simples no objeto JSON. Eu acho que isso vai resolver o problema.


Você só precisa remover dataType: 'json' do seu cabeçalho se o método de serviço da Web implementado for nulo.

Nesse caso, a chamada Ajax não espera ter um tipo de dados de retorno JSON.


Você simplesmente tem que remover o dataType: "json" na sua chamada AJAX

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json', //**** REMOVE THIS LINE ****//
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

Veja isso . Seu problema também é semelhante. Trabalhando eu tentei.

Não remover dataType: 'JSON',

Nota: echo apenas JSON Formate no arquivo PHP se você usa apenas php echo seu código ajax return 200







json