Eu implementei uma solicitação Ajax no meu site e estou chamando o terminal 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. 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>");
}
Preciso da ("Record deleted")
string após a exclusão bem-sucedida. Consigo 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?
TwitterId
, então você tem que passar um objeto paradata
, não uma string:data: {TwitterId: row}
.Respostas:
jQuery.ajax
tenta converter o corpo da resposta, dependendo dodataType
parâmetro especificado ou doContent-Type
cabeçalho enviado pelo servidor. Se a conversão falhar (por exemplo, se o JSON / XML for inválido), o retorno de chamada de erro será acionado.Seu código AJAX contém:
Nesse caso, jQuery:
Seu código do lado do servidor retorna um snippet HTML com
200 OK
status. O jQuery esperava JSON válido e, portanto, aciona o retorno de chamada de erro queixando-separseerror
.A solução é remover o
dataType
parâmetro do seu código jQuery e fazer com que o código do lado do servidor retorne:Mas eu prefiro sugerir o retorno de uma resposta JSON e exibir a mensagem dentro do retorno de chamada de sucesso:
fonte
$.ajax
você pode tentar$.getScript
. Dentro do script C # do lado do servidor, basta colocaralert('Record Deleted');
(sem<script>
tag) e definir o ContentType do seu script C # paratext/javascript
.$.ajax
também pode funcionar, mas não me lembro como, pode ser que você só precise mudardataType: 'script',
. Você pode não precisar mais do manipulador de sucesso.$.post
. Nesse caso, o jquery adivinha um tipo de dados e os erros quando falha ao analisar . Esta é uma pegadinha realmente desagradável e difícil de encontrar. Eu o corrigi definindo o tipo de dados para"text"
.Eu tive sorte com o uso de vários
dataType
s separados por espaço ( jQuery 1.5+ ). Como em:fonte
Você simplesmente precisa remover o dataType: "json" na sua chamada AJAX
fonte
Isso é apenas para constar desde que me deparei com este post ao procurar uma solução para o meu problema que fosse semelhante aos do OP.
No meu caso, minha solicitação do jQuery Ajax foi impedida devido à política de mesma origem no Chrome. Tudo foi resolvido quando modifiquei meu servidor (Node.js) para:
Literalmente, me custou uma hora batendo com a cabeça na parede. Estou me sentindo estúpido ...
fonte
Eu acho que sua página aspx não retorna um objeto JSON. Sua página deve fazer algo assim (page_load)
Além disso, tente alterar seu AjaxFailed:
textStatus
deve fornecer o tipo de erro que você está recebendo.fonte
Eu enfrentei esse problema com uma biblioteca jQuery atualizada. Se o método de serviço não retornar nada, isso significa que o tipo de retorno é
void
.Em sua chamada do Ajax, mencione
dataType='text'
.Isso resolverá o problema.
fonte
Você apenas precisa remover
dataType: 'json'
do 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.
fonte
Use o código a seguir para garantir que a resposta esteja no formato JSON (versão PHP) ...
fonte
Eu tive o mesmo problema. Meu problema foi que meu controlador estava retornando um código de status em vez de JSON. Certifique-se de que seu controlador retorne algo como:
fonte
Eu tenho o problema semelhante, mas quando tentei remover o tipo de dados: 'json' ainda tenho o problema. Meu erro está sendo executado em vez do sucesso
fonte
Outra coisa que atrapalhou as coisas para mim foi usar em
localhost
vez de 127.0.0.1 ou vice-versa. Aparentemente, o JavaScript não pode manipular solicitações de uma para a outra.fonte
Veja isso . É também um problema semelhante. Trabalhando eu tentei.
Não remova
dataType: 'JSON',
Nota: echo apenas o formato JSON no arquivo PHP se você usar apenas php echo seu código ajax retornará 200
fonte
Eu tive o mesmo problema. Como minha resposta JSON contém alguns caracteres especiais e o arquivo do servidor não foi codificado com UTF-8, a chamada Ajax considerou que essa não era uma resposta JSON válida.
fonte
Se você sempre retornar JSON do servidor (sem respostas vazias),
dataType: 'json'
deve funcionar econtentType
não é necessário. No entanto, verifique se a saída JSON ...O jQuery AJAX lançará um 'parseerror' em JSON válido, mas não serializado!
fonte
Seu script exige um retorno no tipo de dados JSON.
Tente o seguinte:
fonte
Tente seguir
OU
Use aspas duplas em vez de aspas simples no objeto JSON. Eu acho que isso resolverá o problema.
fonte