Erro Interno Do Servidor Ajax - 500

Estou a tentar aprender AJAX para este projecto no trabalho. Tenho um site que carrega medicamentos que um paciente está a tomar.

Eu chamo a esta função AJAX recursivamente para que ela adicione uma nova tabela contendo um único medicamento e 7 dias de história. Estou com problemas em conseguir o código para executar em FF e IE. Funciona perfeitamente em cromado. Eu tinha alertas mostrando o xmlhttp.situação e isto é o que eu tenho:

Xmlhttp.status = 500 (servidor interno erro).

eu comentei toda a minha recursão por isso é reduzido a este pedaço de código tid. (x mantém o controle do número de medicamentos para que eu saiba quando parar)

function LoadMeds()


  if ( x == MaxMedCount )
  {
      document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7; 
  }
  if ( x == (MaxMedCount - 1) )
  {
      document.getElementById("x").value = x + 1;
      show();
  }
  else
  { 

      if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
      }
      else
      {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange=function()
      {
          try 
          {      
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {     
                  var div = document.createElement('div');
                  div.innerHTML= xmlhttp.responseText;
                  document.getElementById('MedTable').appendChild(div);
                  document.getElementById("the_med_").value = the_med_;

              }

          }
          catch(e)
          {
              alert("Error");  
          }
      }
      xmlhttp.open("GET","URL with variables passed",true);
      xmlhttp.send();     
      document.getElementById("x").value = x + 1;
  } 
Se for necessário mais código, avisa-me.

Author: Willi Mentzel, 2011-01-25

8 answers

O que significa que algo correu mal do lado do servidor. Poderia ser várias coisas, mas eu começaria por verificar que a URL e os parâmetros estão corretos. Além disso, certifique-se de que o que quer que trate do pedido está esperando o pedido como um GET e não um POST.

Uma maneira útil de saber mais sobre o que está a acontecer é usar uma ferramenta como Fiddler que lhe permitirá ver todos os pedidos e respostas HTTP para que possa ver exactamente o que está a enviar e o servidor é a responder com.

Se não tem uma razão convincente para escrever o seu próprio código Ajax, seria muito melhor usar uma biblioteca que lida com as interacções Ajax para si. o jQuery é uma opção.
 47
Author: Jonathon Faust, 2011-01-25 04:13:37

Acho que os seus dados de retorno são muito longos. então o formato JSON foi corrompido. Deve alterar o tamanho máximo dos dados JSON desta forma:

Abra a Web.Ficheiro de configuração e colar estas linhas na secção de configuração

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>
 9
Author: Emad Armoun, 2015-05-23 01:57:03

Este pode ser um parâmetro incorreto para a sua chamada SOAP; veja o formato do(s) parâmetro (s) na secção 'data:' json - esta é a carga que está a passar por cima do parâmetro e os dados embalados no formato JSON.

A barra de depuração do Google Chrome tem algumas boas ferramentas para verificar os parâmetros e ver as mensagens de erro - por exemplo, comece com a página da consola e carregue no URL que os erros ou carregue na página da rede. Você vai querer ver os cabeçalhos da Mensagem, Resposta etc...

 6
Author: user14114, 2014-02-19 17:47:17

Descomentar a seguinte linha : [System.Web.Script.Services.ScriptService]

O serviço começará a funcionar bem.

[WebService(Namespace = "http://tempuri.org/")]


 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


Para permitir que este serviço Web seja chamado a partir do script, usando ASP.NET AJAX, descomente a seguinte linha.

[System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService 
{
 2
Author: Nadir Siddiqui, 2015-04-17 10:32:12

Teve o mesmo problema, então eu me lembrei de que, por razões de segurança ASP não expor todo o erro de rastreamento de pilha ou ao acessar o seu site/serviço remotamente, mesmo não sendo capaz de testar um .asmx serviço web remotamente, então eu remoto para o servidor e monitorados meu dev tools, e só então eu consegui o notório mensagem "não foi possível carregar arquivo ou assembly 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' ou um de seus dep...".

Então faça logon no servidor e debug a partir daí.

 1
Author: user2351772, 2015-04-17 06:50:24
Eu corrigi um erro como este mudando os lugares das rotas nas rotas.php, por exemplo eu tinha algo assim:
Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');

E depois digo Assim:

Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
 0
Author: Jennifervdz, 2018-02-17 15:41:55
Tive o mesmo erro. Acontece que a causa era que o método back end estava esperando diferentes dados json. Na minha chamada do Ajax tinha algo assim:
$.ajax({
        async: false,
        type: "POST",
        url: "http://13.82.13.196/api.aspx/PostAjax",
        data: '{"url":"test"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    });
Agora, no meu WebMethod, dentro do meu código C# backend, declarei o meu objectivo assim:
public static string PostAjax(AjaxSettings settings)

Onde foi declarado AjaxSettings:

public class AjaxSettings
{
    public string url { get; set; }
}
O problema era que o mapeamento entre a minha chamada ajax e o meu objectivo final não era o mesmo. Assim que mudei a minha chamada do ajax para o seguinte, tudo funcionou bem!
var data ='{"url":"test"}';    
$.ajax({
    async: false,
    type: "POST",
    url: "http://13.82.13.196/api.aspx/PostAjax",
    data: '{"settings":'+data+'}',
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});
Tive de alterar a variável de dados dentro da chamada Ajax para corresponder exactamente à assinatura do método.
 0
Author: Sotiris Zegiannis, 2018-04-04 10:24:04

Deve-se usar behavior: JsonRequestBehavior.AllowGet no Post Json Return Em C#

 0
Author: Muhammad Yasir, 2018-04-11 09:24:13