加载页面片段的JQuery返回一个未定义的

时间:2013-02-03 06:07:43

标签: javascript jquery ajax jsp twitter-bootstrap

这是我的回复由ajax返回的页面。

<!DOCTYPE HTML>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Insert title here</title>
<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
</head>
<body>

    <div id = "div1">
        <h1>HI am a dashboard</h1>
        <h1>HI am a dashboard</h1>
        <h1>HI am a dashboard</h1>
    </div>
</body>
</html>

在我的ajax成功代码中我正在做这个

$('body').on('submit', '#sign-in', function(e) {
    e.preventDefault();

    var data = $(this).serialize();

    var url = $(this).attr('action');
    $.ajax({
        //this is the php file that processes the data and send mail
        url : url,
        type : "POST",
        data : data,
        dataType:"html",
        //Do not cache the page
        cache : false,
        //success
        success : function(data) {
            console.log(data);
            console.log($(data).find('#div1').html());
        }
    });
})

console.log($(data).find('#div1').html());  未定义。而

console.log(data);

返回我之前说过的页面。

更新 发现问题,我的代码中有两个“数据”变量。我已成功更改了一个,但它仍然返回undefined

$('#submit-login').on('click',function(e){
        $('#hidden-submit-login').click();
})

    $('body').on('submit', '#sign-in', function(e) {
        e.preventDefault();

        var data = $(this).serialize();

        var url = $(this).attr('action');
        $.ajax({
            //this is the php file that processes the data and send mail
            url : url,
            type : "POST",
            data : data,
            dataType:"html",
            //Do not cache the page
            cache : false,
            //success
            success : function(response) {
                console.log($(response).find('#div1').html());
                console.log(response);
                //console.log($((html).find('#div1').html();
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

您正在string上应用jQuery选择器而不是DOM元素 response对象是请求的结果;它在您的DOM中不存在。

就像; document.getElementById('div1')会返回null

在使用之前,您应该为DOM创建/附加HTML元素。

如果您要执行的操作是解析页面内的<div id="div1">...</div>块,请提出请求:

首先,我建议您删除所有其他标记(包括<html><body><head>以及<head>内的所有内容。所以你的文件只包括:

<div id="div1">
    <h1>HI am a dashboard</h1>
    <h1>HI am a dashboard</h1>
    <h1>HI am a dashboard</h1>
</div>

然后在你的AJAX success()回调中;使用jQuery DOM插入方法(在这里为您选择合适的方法:insideoutside):

$.ajax({
    url : url,
    type : "POST",
    data : data,
    dataType: "text",
    cache : false,
    success : function(data) {
        if (data) {
            $('body').append(data); //this will append the html inside the response; at the end bottom of your page's body
            console.log($('#div1').html());
        }
    }
});

现在您已将div1附加在页面正文的底部,因此可以访问。

console.log($('#div1').html());

注意:请确保 id div1是唯一的,以便在进行进一步操作时不要选择其他现有元素。