嘿所有我使用AJAX POST方法调用我的webservice时从回调中得到奇怪的回报。
webservice正在发送JSON,如下所示:
Dim ser As New System.Web.Script.Serialization.JavaScriptSerializer()
Dim strResponse As String = ser.Serialize(results)
Context.Response.Clear()
Context.Response.ContentType = "application/json"
Context.Response.AddHeader("content-length", strResponse.Length.ToString())
Context.Response.Write(strResponse)
HttpContext.Current.ApplicationInstance.CompleteRequest()
上面 strResponse 的值为:
"[{\"Column1\":\"0589S2F\"},{\"Column1\":\"53699FNS\"},{\"Column1\":\"C38VVFD\"},{\"Column1\":\"LFD55F\"},{\"Column1\":\"2ERfG\"},{\"Column1\":\"0079\"},{\"Column1\":\"2054\"},{\"Column1\":\"054FGW\"}]"
由于某些原因,我的ajax返回 200 确定但仍然进入 ERROR 逻辑,错误消息为:
ERROR: "[{\"Column1\":\"0589S2F\"},{\"Column1\":\"53699FNS\"},{\"Column1\":\"C38VVFD\"},{\"Column1\":\"LFD55F\"},{\"Column1\":\"2ERfG\"},{\"Column1\":\"0079\"},{\"Column1\":\"2054\"},{\"Column1\":\"054FGW\"}]"{"d":null}
请注意它如何将 {" d":null} 附加到我的请求的末尾...这是从哪里来的,因为我没有发送任何类似的东西在 strResponse ???
我的ajax请求代码:
var sqlQ = "SELECT TOP 50 LTRIM(RTRIM(REPLACE(OID, ' ', ''))) FROM vwPSDAT WHERE OID != ''";
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: 'http://zzzz/Service1.asmx/theQ',
data: JSON.stringify({ qString: [sqlQ] }),
async: true,
cache: false,
success: function (data) {
var obj = jQuery.parseJSON(data);
console.log('done!');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log('ERROR: ' + XMLHttpRequest.responseText);
}
});
答案 0 :(得分:7)
好吧,我只需要在写入页面之前添加 Context.Response.Flush()。
Context.Response.Clear();
Context.Response.ContentType = "application/json";
Context.Response.AddHeader("content-length", strResponse.Length.ToString());
Context.Response.Flush();
Context.Response.Write(strResponse);
HttpContext.Current.ApplicationInstance.CompleteRequest();
一旦我这样做,一切都很好。
答案 1 :(得分:1)
在执行 StealthRT 的情况下,您会在所需的数据上附加一些错误,可以通过指定响应的长度并限制输出来消除此错误:< / p>
Context.Response.AddHeader("content-length", strResponse.Length.ToString());