【问题标题】:msg.d from asp.net webmethod is undefined来自 asp.net webmethod 的 msg.d 未定义
【发布时间】:2013-01-04 13:38:14
【问题描述】:

我正在尝试关注this article 以使用 jQuery AJAX 从 webmethod 获取值。我已将其缩减为单输入表单。

问题是,它总是失败并且 msg.d 总是未定义。在 Firebug 中,我可以看到 POST 并且数据字符串的格式正确。我不能,因为我一生都无法弄清楚为什么这一直失败。我的 webmethod 中设置的断点被命中,但页面在完全运行之前显示失败消息。

有什么想法吗?这是我的代码:

基本形式:

<div id="contact">
    <ul>
        <li><div>Name*</div>
        <input name="ctl00$ContentPlaceHolder1$txtName" type="text" id="ctl00_ContentPlaceHolder1_txtName" />
        </li>               
        </ul>
        <ul class="submit">
            <li>* required</li>
            <li class="submit_button">

        <input type="submit" name="ctl00$ContentPlaceHolder1$btnSubmit" value="Submit"     id="ctl00_ContentPlaceHolder1_btnSubmit" />
            </li>
        </ul>
   </div>

jQuery:

<script type="text/javascript">

    jQuery(document).ready(function () {

        $("#ctl00_ContentPlaceHolder1_btnSubmit").click(function () {
            var name = $("#ctl00_ContentPlaceHolder1_txtName");
            $.ajax({
                type: "POST",
                dataType: "json",
                contentType: "application/json",
                url: "Default.aspx/SendEmail",
                data: "{'name':'" + name.val() + "'}",
                success: function (msg) {
                    alert("success");
                    alert(msg.d);
                },
                error: function (msg) {
                    alert("fail");
                    alert(msg.d);
                }
            });
        });

    });

</script>

网络方法:

[WebMethod]
public static string SendEmail(string name)
{
    return "success";
}

【问题讨论】:

  • 失败信息是什么?
  • @lante:警报中的失败消息是“未定义”
  • 你在使用 ASP.Net 2.0 吗?
  • 您知道,您不能在错误方法中使用alert(msg.d),因为第一个参数,您称为 msg 的不是像 success 方法那样的响应,它是 jqXHR 对象它没有 d 属性。这就是它发出未定义警报的原因。

标签: c# jquery asp.net ajax webmethod


【解决方案1】:

您正在从 server 返回一个字符串,而不是 AJAX dataType 正在寻找的 JSON。字符串没有属性d

删除dataType 选项并尝试alert(msg)

【讨论】:

  • 我删除了数据类型参数,但 alert(msg) 现在返回 [object Object]
  • 显示的代码是字符串,警报提示您正在获取一个对象...使用console.log(msg) 并在浏览器控制台中检查数据...您在那里看到了什么?还可以在控制台中检查完整的请求并查看实际的 responseText
  • 我有返回字符串的 webmethods,它们可以很好地处理 JSON 和 Ajax..
  • OK.. 您收到来自 AJAX 错误的警报,而不是成功。 readyState=0 表示您没有连接到服务器文件
  • 我肯定会在 SendEmail 方法中设置断点。我还可以看到我正在以相同的方法将 name.val() 传递给 name 参数。这一切都应该在本地工作,不是吗?该项目尚未上线。
猜你喜欢
  • 2011-04-28
  • 2017-11-19
  • 2015-08-14
  • 2013-06-06
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多