【问题标题】:ajax data returns 'page source code' or 'undefined'ajax 数据返回“页面源代码”或“未定义”
【发布时间】:2015-09-23 16:21:41
【问题描述】:

我在 AJAX 数据中遇到问题。 (我正在使用 asp.net 网络表单)我需要从页面 dom 元素收集数据,因为我想在同一页面中将它们的值异步附加到表行。只是为了测试我在成功函数中写了警报(数据)。但数据返回“源代码”或“未定义”。

下面我尝试了 2 种方法来获取 HTML 和 JSON 中的 ajax 数据。结果是一样的。

带有 JSON 数据类型的 ajax:

$(document).ready(function () {
    $('img').live('click', function (event) {
        event.preventDefault();

        var number= $(this).attr('id');
        var date= '06.04.2015';
        var name= "xyz";

        $.ajax({
            type: 'post',
            url: 'treatment.aspx',
            contentType: "application/json;charset=utf-8",
            dataType:JSON,
            data: JSON.stringify({
                number: number,
                date: date,
                name: name
            }),
            success: function (data) {
                alert(data);
            } 
        });
    }); 
});

带有html数据类型的ajax:

$.ajax({
            type: 'post',
            cache: false,
            url:'treatment.aspx',
            contentType:"text/html",
            dataType: 'html',
            data:"some data",

            success: function (data) {
                document.getElementById("demo").innerHTML = data;
            }

        });

(我也试过alert(data[0].number)和alert(data.number),不行。)

谢谢。

【问题讨论】:

  • 服务返回什么?它是有效的 JSON 吗?
  • 请在服务器端向我们展示您的代码
  • 您的 ajax 服务的 URL 是什么?该特定页面上网站的 URL 是什么?
  • 在调试时你真的应该使用console.log() 而不是alert(),因为alert() 实际上会暂停程序执行,这意味着你的调试行为实际上可以改变代码的性能。
  • 这里没有网络服务。我正在从页面中的 dom 元素收集 json 数据。在此声明中: var number= $(this).attr('id');var date= '06.04.2015';变种名称=“xyz”; @Cubi

标签: html asp.net ajax json


【解决方案1】:

试试这个代码,我认为它可能会工作..

$(document).ready(function () {
$('img').live('click', function (event) {
    event.preventDefault();

var jsonObject = new Object();
jsonObject.number = $(this).attr('id');
jsonObject.date   = 'date value';
jsonObject.name   = 'desired name';
var jsonData      = json.parse(jsonObject);

           $.ajax({
url: "your orders",
type: "POST",
data: jsonData,
dataType: "json"
});      
        success: function (data) {
            alert(data);
        } 
    });
}); 
});

【讨论】:

    【解决方案2】:

    我假设您正在从服务器返回有效的 json(我建议您也检查一下)。

    在你的 jquery ajax 调用中你有配置

    dataType: JSON
    

    JSON 是窗口对象 (IE8+) 上的一个对象,不是 ajax 配置的有效选项。因此,您将一个 javascript 对象传递给 jquery ajax 调用,而不是一个可识别的命令;意味着它不知道该怎么做。您需要将此配置属性更改为

    dataType: 'json'
    

    可以在jquery documentation 下找到有关 ajax 配置选项正确值的详细信息。 dataType 选项的所有选项都是字符串值。

    附带说明 - 我建议您不要在 jquery 中使用“live”,因为它已被弃用,而是建议使用“on”。

    编辑 - 其他建议

    这可能是服务器端代码而不是 jquery 的问题。从 ajax url 中的 aspx 页面,我可以假设您使用的是 Web 窗体吗?如果是这样,那么对 aspx 页面的 ajax 调用通常意味着调用该页面上的 Web 方法;在这种情况下,ajax url 需要指定 web 方法的名称。例如url: '/some/path/treatment.aspx/MyMethod',它会在 C# 中像这样定义一个相应的 web 方法(在 VB 中会有类似的东西)

    [WebMethod]
    public static string MyMethod(){
        // your code
        return someJsonString;
    }
    

    我建议对 ajax 请求发送的内容以及服务器端代码接收的内容进行一些调查。也许在 ajax 调用上添加一个错误回调,看看它是否被命中以及它报告了什么。我猜客户端发送的内容与服务器的预期内容之间存在一些不匹配,但没有更具体的信息,我不确定到底是什么问题。

    我希望这些建议对您有所帮助。

    【讨论】:

    • 我不会从其他地方(如 Web 服务)返回 json 数据。这就是我感到困惑的地方。我需要从页面的 dom 元素(数字、日期和名称)中获取数据并异步附加到同一页面中的表中。
    • @linda22 我在回答中添加了一些额外的建议,这可能会有所帮助。关于我关于 jquery 中“live”的注释 - 是的,它目前可以工作,但未来版本的 jquery 将删除对它的支持。
    • 感谢您的帮助。我编辑了我的问题,并试图更具体。
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2020-01-12
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多