我正在为移动设备开发一个网站,该网站使用jQuery(v 1.7.2)向ASP.NET(v 2.0.50727)Web服务进行ajax调用。
该呼叫在95%的时间内正常工作,但它将随机失败,返回500内部服务器错误。在执行第一行代码之前,它在服务器端失败(第一行写入事件日志)。
我还没有看到使用我记得的桌面浏览器的呼叫失败,但我已经看到它使用iPad失败了。我添加了
<browserCaps userAgentCacheKeyLength="256">
到Web服务的web.config文件,但这没有帮助。
的javascript:
$.ajax({
type: "POST",
url: serverURL + "/getImage",
data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg,textStatus, jqXHR) {
...
}, error: function(xhr, ajaxOptions, thrownError) {
...
}
}).done(function(){
console.log("getImage call is done");
});
传递给Web服务的示例数据:
'{"formURL":"fileName.xml", "rowNumber":"1"}'
C#
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getImage(string formURL, string rowNumber) {
log("Retrieving image of form " + formURL);
string image = "";
string username = /*retrieve username*/;
string password = /*retrieve password*/;
if (username != null && username != "") {
image = /*code to retrieve the image*/;
}
return image;
}
private void log(string message) {
EvLog.WriteToEventLog(DateTime.Now.ToString("MM:dd:yyyy H:mm:ss:fff") + Environment.NewLine + message, 10);
}
我发现的唯一有点帮助我的是,当调用失败时,因为来自Web服务的响应头包含“jsonerror:true”,尽管我无法确定它为什么会随机失败。
感谢任何帮助!
答案 0 :(得分:0)
假设它确实是一个JSON错误,我首先想到的是传递给参数的数据不正确。
以下行引用了变量的内容,我假设它是从代码中的其他位置加载的:
data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
假设您已经确定rowNumber是一个整数值并且不会破坏它,那么'url'变量可能会破坏您的JSON格式。这种情况最简单的方法就是如果你在文件名中有一个未转义的引号,特别是当它连接时你的参数值比预期更早关闭。
字符总是存在对字符集无效的可能性。您是否有触发故障的示例数据?提供的示例看起来很干净,所以我假设它不是错误情况之一。
答案 1 :(得分:0)
不要以这种方式构建数据
data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
它可能导致格式错误的JSON字符串。
而不是使用JSON.stringify方法对您的JavaScript对象进行字符串化:
data: JSON.stringify({formUrl: url, rowNumber: rowNumber}),
JSON.stringify将让您将所有对象表示为有效的JSON字符串。