响应文本未定义的asp.net代码背后

时间:2013-01-22 08:15:07

标签: c# .net ajax jquery asp.net-ajax

var req = $.ajax({
            type: 'GET',
            cache: false,
            url: 'loc.aspx?count=' + str,
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            async: false,
            data:'{}',
            success: function (data) {
                alert(data.responseText);
            }
        });
        req.fail(function (data) {
        TINY.box.show({ html: 'Server Error. Try again: ' + data.responseText, animate: false, close: false, boxid: 'error', top: 100 });
        });

以上代码用于在jsp中正常工作,现在我正在尝试在asp.net c#中使用,无论如何我在错误块中获取正确的数据,我希望它在成功块中。即使data.d没有帮助,

如果我写了类似alert(data)的内容,我会得到完整的html,我只需要响应文本,当我像这样使用data.responseText时,我会得到未定义的。有人帮忙。

由于

1 个答案:

答案 0 :(得分:0)

以下代码应该可以正常工作。我在你犯错的地方添加了一些评论

var req = $.ajax({
            type: 'GET',
            cache: false,
            url: 'loc.aspx?count=' + str,
            dataType: 'html',// as you return a simple html dataType:json will throw an error as jquery will not be able to parse received string
            contentType: "application/json; charset=utf-8",
            async: false,
            data:'{}',
            success: function (data) {
                alert(data);// data is not an XHR object. it is a processed response. In your case - simple string with HTML which, of course, has no method responseText
            }
        });
        req.fail(function (data) {
        TINY.box.show({ html: 'Server Error. Try again: ' + data.responseText, animate: false, close: false, boxid: 'error', top: 100 });
        });

.fail函数中,您有data.responseText,因为在这种情况下,XHR对象作为第一个参数传递(请参阅this)。同时,success回调的第一个参数是随请求收到的干净数据。如果没有详细信息,您可以认为data == xhr.responseText成功回调。请参阅this部分

中的成功财产说明

<强> UPD

如上所述,问题不仅出现在JS上。我想你有一个简单的.aspx页面,用ajax调用。有两种解决方案:

1)改用webservice。它会更好,因为它不会经历完整的页面加载循环,应该更快地执行。它不会产生未使用的HTML

2)aspx页面默认会输出一些HTML。在您返回ajax请求的响应之前,您应该清除响应(因此已生成的HTML将不会发送到服务器),编写您的响应并立即结束它:

Response.Clear();
Response.Write("hello");
Response.End();

这样您只能成功收到hello