【问题标题】:response data showing in error part of jquery响应数据显示在 jquery 的错误部分
【发布时间】:2013-01-15 08:55:03
【问题描述】:

我正在将一些数据从 jquery.ajax 发送到 aspx,在那里解析并写入响应,但是该数据出现在错误部分,我认为发生了一些错误,没有显示出来,但正在获取正确的数据在错误部分返回。代码如下。

JQUERY

var json = "{'uname':'" + $("#uname").val() + "','pwd':'" + $("#pwd").val() + "'}";
        alert(json);
        $.ajax({
            type: "POST",
            url: "DataProcess.aspx?Save=1",
            data: json,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (msg) {
                alert(msg);
            },
            error: function (msg) { alert("failed: " + msg.responseText); }
        });

DataProcess.aspx.cs

namespace Test
{
    public partial class DataProcess : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                ProcessAjaxRequest();
        }
        private void ProcessAjaxRequest()
        {
            if (Request.ContentType.Contains("json") && Request.QueryString["Save"] != null)
                SaveMyData();
        }
        private void SaveMyData()
        {
            System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream);
            string line = "";
            line = sr.ReadToEnd();
            JObject jo = JObject.Parse(line);
            Response.Write(line);
            Response.Write((string)jo["uname"]);
            Response.Write((string)jo["pwd"]);

        }
    }
}

所以我得到了错误部分的响应,有什么问题?

我遇到了问题,上面的代码是正确的,现在我的另一个疑问是,我可以从同一个 aspx.cs 调用特定的非静态方法吗,我的意思是当我尝试类似“DataProcess.aspx/Test?Save =1”。它给出了错误说不是网络方法,我将方法声明为

[WebMethod]
public void Test(){
}

K 伙计们,我以为问题已经解决了,刚才我观察到,如果我写一个字符串来响应类似这样的 Response.Write("success"),它会出现在 jquery 错误块中,但是当我写一些东西时像这样的“Response.Write(0);”,它进入了成功块。第一个应该也来了,有人解释一下是什么问题

谢谢

【问题讨论】:

  • 你能粘贴一个“正确数据”的例子吗?当async 设置为false 时,为什么还要使用AJAX 调用?
  • ajax url = url: "Default.aspx/Login?Save=1", 页面名称 = DataProcess.aspx.cs ???
  • 尝试从 JObject jo = JObject.Parse(line); 调试你的代码因为我认为要么解析失败,要么 jo["uname"] 要么为空,要么给出一个超出预期范围的索引。
  • 错误地我在这里保留了错误的网址,我现在更正了它,这也解决了,但我在上面的底部添加了另一个问题,请回答。感谢您的回复。 :)
  • 你应该使用 Web API 来完成这个任务,而不是使用 aspx 作为假控制器

标签: c# jquery asp.net ajax json


【解决方案1】:

不确定确切的问题,但您的 json 看起来像一个字符串。应该是这样的

var json = {'uname':'" + $("#uname").val() + "','pwd':'" + $("#pwd").val() + "'};

【讨论】:

  • 不,我的 jason 是正确的并且输出也是,我在问题结束时提出了其他疑问,请回答。问候
【解决方案2】:

我假设您已经了解了 PageMethods(即用 WebMethod 关键字修饰的静态方法)。
关于您后面的问题,不可能使用非静态(实例)方法作为页面方法。原因很简单——实例方法可以访问实例变量,包括控制树。如果没有视图状态,ASP.NET 无法保证回发方案中的正确控件树状态。对于这样的需求,UpdatePanel 是可行的方法 - 因为它在 ASP.NET 控件模型中提供 AJAX。页面方法用于流线型通信,其中请求/响应数据极简,没有开销(即您希望在客户端/服务器之间通信的唯一有意义的数据)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多