【问题标题】:Undefined AJAX "data" property未定义的 AJAX“数据”属性
【发布时间】:2015-11-24 00:02:56
【问题描述】:

我正在尝试通过模式更新父表单上<span> 字段中的一些文本。为此,我在模式表单上使用 AJAX 调用来检索新用户输入的值。单击“保存”按钮后,模态表单应检索文本框值并将其发送回。

但是我无法将任何值传回。在创建 Javascript 数组的函数中调试时,值存在且正确。但是,一旦我尝试使用 AJAX 调用的 data 属性(例如:data.Address),它就会返回 undefined。

这是我的 AJAX 调用代码:

     $.ajax({
        type: 'POST',
        data:
            {
                ID: $("#clientID-@Model.Id").val(),
                Address1: $("#clientAddress1-@Model.Id").val(),
                Address2: $("#clientAddress2-@Model.Id").val(),
                City: $("#clientCity-@Model.Id").val(),
                Province: $("#clientProvince-@Model.Id").val(),
                PostalCode: $("#clientPostalCode-@Model.Id").val(),
                PhoneNumber: $("#clientPhoneNumber-@Model.Id").val()
            },
        success: function (data) {
            //$("#Address1-@Model.Id").html(data.Address1);

            alert(data); //prints the entire HTML for the form
            alert(data.ID); //prints undefined
            alert($("#clientID-@Model.Id").val()); //prints the correct value - 2827
            alert("Data logged!");
        },
        error: function (data) {
            alert("Error occurred!");
        }
    });

【问题讨论】:

  • 什么是数据??? console.log(data);
  • 有时使用函数作为 ajax 参数会带来麻烦。尝试将数据加载到变量中,然后使用变量而不是函数进行 ajax 调用。并在成功函数中尝试 console.log(data) 来检查返回的内容。
  • @Skatch 我已更新 OP 以删除其他功能。我不确定如何在 VS 2012 中为 MVC 项目打开控制台窗口。我使用 FF 进行测试,但从未使用它进行调试。我仍然很困惑为什么 3 个警报会打印出如此不同的内容。在第 2 和第 3 中,实际上传递的值是相同的。
  • 在 Firefox 中,按 F12。用浏览器开始调试,不要用alert's 调试
  • "alert(data); //打印表单的整个 HTML" 那么你的服务器没有返回你可以从中获取 ID 的东西。

标签: javascript jquery ajax model-view-controller bootstrap-modal


【解决方案1】:

如果您没有从服务器发送正确的标头,说是 json,您必须在 ajax 对象中指定响应是 json 尝试添加 dataType

 $.ajax({
    type: 'POST',
    dataType:'json',
    data: getModelData(),
    success: function (data) {
        //$("#Address1-@Model.Id").html(data.Address1);
        alert(data[0].Address1);
    },
    error: function (data) {
        alert("Error occurred!");
    }
});

或者在服务器中指定内容类型application/json

【讨论】:

  • 无论我做什么,总是调用error 方法。我省略了该特定属性,以便它检测我正在使用的内容。我不确定,因为我没有为我正在从事的项目奠定基础。有没有办法检查内容类型?
  • 在 google chrome 控制台中,转到网络,单击您进行的 ajax 调用,然后在右侧您将看到响应标头,如果您在说,请查看内容类型标头总是调用错误方法,请在我已经提到的同一选项卡中检查响应的状态代码是否正确(200、304)
  • 状态码为 200(OK),内容类型标头为“text/html; charset=utf-8”。我将指定text/html 作为数据类型属性。
  • 如果您将 json 响应读取为 json,最好将响应标头中的内容类型设置为 application/json,请参阅 SPEC ietf.org/rfc/rfc4627.txt
猜你喜欢
  • 2019-12-13
  • 2016-02-04
  • 2018-09-10
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多