jQuery AJAX附加到Json返回数据"d:null"

jQuery AJAX appending to Json return data "d:null"

本文关键字:quot null 数据 返回 AJAX Json jQuery      更新时间:2023-09-26

嘿,当我使用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返回200OK,但仍然进入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);
     }
});

似乎我只需要在写入页面之前添加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();

添加response.End()为我解决了问题:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.AddHeader("content-length", res.Length.ToString());
HttpContext.Current.Response.Write(res);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

在做StealthRT seas的情况下,您得到了一些附加到您需要的数据的错误,您可以通过指定响应的长度和限制输出来摆脱它:

Context.Response.AddHeader("content-length", strResponse.Length.ToString());