我正在努力为这个项目学习AJAX。我有一个网站,负载患者正在服用的药物。
我以递归方式调用此AJAX函数,以便它附加一个包含单一药物和7天历史记录的新表。我在让代码在FF和IE中执行时遇到问题。铬合金完美无缺。我有警告显示xmlhttp.status,这就是我得到的:
xmlhttp.status == 500(内部服务器 误差)。
我注释掉了所有的递归,因此它缩小到了这个代码。 (x跟踪药物的数量,所以我知道何时停止)
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;
}
如果需要更多代码,请告诉我。
答案 0 :(得分:50)
500 (internal server error)
表示服务器端出现问题。这可能是几件事,但我首先要验证URL和参数是否正确。此外,请确保处理请求的任何内容都期望请求为GET而不是POST。
了解更多有关正在发生的事情的一种有用方法是使用Fiddler这样的工具,它可以让您查看所有HTTP请求和响应,这样您就可以准确地看到您发送的内容以及服务器正在响应的内容
如果您没有令人信服的理由编写自己的Ajax代码,那么使用处理Ajax交互的库会更好。 jQuery是一种选择。
答案 1 :(得分:10)
我认为你的返回字符串数据很长。所以JSON格式已经损坏。 您应该以这种方式更改JSON数据的最大大小:
打开Web.Config文件并将这些行粘贴到配置部分
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
答案 2 :(得分:6)
这可能是您的SOAP调用的错误参数;查看'data:'json部分中参数的格式 - 这是您传递的有效负载 - 以JSON格式包装的参数和数据。
Google Chrome的调试工具栏有一些很好的工具来验证参数并查看错误消息 - 例如,从控制台选项卡开始,然后单击错误的URL或单击网络选项卡。您需要查看邮件的标题,响应等...
答案 3 :(得分:2)
取消注释以下行:[System.Web.Script.Services.ScriptService]
服务将开始正常运作。
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
允许使用ASP.NET从脚本调用此Web Service AJAX,取消注释以下行。
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
答案 4 :(得分:1)
有同样的问题,那么我记得,出于安全原因,ASP在远程访问您的站点/服务时不会暴露整个错误或堆栈跟踪,就像无法测试.asmx
一样远程Web服务,所以我远程进入服务器并监视我的开发工具,然后才得到臭名昭着的消息&#34;无法加载文件或程序集'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
或其中一个dep ...&# 34。
所以登录服务器并从那里进行调试。
答案 5 :(得分:0)
我修改了一个像这样的错误来改变routes.php中路由的位置,例如我有这样的东西:
Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
然后我这样说:
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
答案 6 :(得分:0)
我有同样的错误。事实证明,原因是后端方法期望不同的json数据。在我的Ajax调用中我有这样的事情:
$.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",
});
现在在我的WebMethod中,在我的C#后端代码中,我已经声明了我的端点:
public static string PostAjax(AjaxSettings settings)
宣布AjaxSettings的地方:
public class AjaxSettings
{
public string url { get; set; }
}
问题是我的ajax调用和后端端点之间的映射不一样。一旦我将ajax调用改为以下内容,一切都运行良好!
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"
});
我必须更改Ajax调用中的数据变量才能完全匹配方法签名。
答案 7 :(得分:0)
必须在C#
中的帖子behavior: JsonRequestBehavior.AllowGet
中使用Json Return