Erro Interno Do Servidor Ajax - 500
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.
8 answers
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.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>
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...
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
{
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í.
Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
E depois digo Assim:
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
$.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.
Deve-se usar behavior: JsonRequestBehavior.AllowGet
no Post Json Return
Em C#