Javascript - 只有在按两次按钮后才会显示页面

时间:2015-02-08 06:25:29

标签: javascript jquery ajax dom scope

第一个问题是第一次单击按钮时不显示页面。第二个相关的问题是,第一次单击按钮时出现“无法读取未定义的属性'innerHTML'的错误”,但单击按钮两次时一切正常。

main.js

var surveyPage = '';
var surveyQuestions = '';
var surveyPageData = '';

var fakeDiv = document.createElement( 'div' );

function get_surveyPageHtml(url) {
    $.get(url, function(data) {
        //console.log(data);
        surveyPage = data;

        fakeDiv.innerHTML = '';
        fakeDiv.innerHTML = data;

    });
    surveyQuestions = '';
    surveyQuestions = fakeDiv.getElementsByClassName('question');
    console.log(surveyQuestions);

    surveyPageData = surveyQuestions[1].innerHTML;
    console.log(surveyPageData);
}

$(document).ready(function() {

    url = "page/page.html";
    $("#button").click(function(){   

        get_surveyPageHtml(url);
        $("#display").html(surveyPage); 

    });
});

的index.html

<!DOCTYPE html>
<html>
<head>
    <title>TEST</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <script type="text/javascript" src="jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="main.js"></script>

</head>
<body>
    <div>
        <button id="button">Get page data</button>
    </div>

    <div id="display"></div>

</body> 
</html>

页/ page.html中

<h2>Survey</h2>

<label class="question">Question 1</label>
<label class="question">Question 2</label>
<div class="question">
    Question 3
    <label class="question">Question 4</label>
</div>

2 个答案:

答案 0 :(得分:0)

你问题的罪魁祸首是:

get_surveyPageHtml(url);
$("#display").html(surveyPage); 

AJAX请求需要时间,并且您正在尝试在AJAX请求完成之前使用响应。您可以在此处移动$("#display").html(surveyPage);来解决此问题:

//...
$.get(url, function(data) {
    //console.log(data);
    surveyPage = data;

    fakeDiv.innerHTML = '';
    fakeDiv.innerHTML = data;

    $("#display").html(surveyPage);
})

这样,当AJAX响应进入时,页面就被加载了。

- 编辑 -

您获得Cannot read property 'innerHTML' of undefined的原因与第一个相同,只是在不同的代码块中。这就是你应该这样做的方式:

function get_surveyPageHtml(url) {
    $.get(url, function(data) {
        //console.log(data);
        surveyPage = data;

        fakeDiv.innerHTML = '';
        fakeDiv.innerHTML = data;
        $("#display").html(surveyPage);

        surveyQuestions = '';
        surveyQuestions = fakeDiv.getElementsByClassName('question');
        console.log(surveyQuestions);

        surveyPageData = surveyQuestions[1].innerHTML;
        console.log(surveyPageData);

    });

}

答案 1 :(得分:0)

为了澄清一些事情,你的另一个陈述也应该在ajax完成后继续。

$.get(url, function(data) {

    // code...

    surveyQuestions = '';
    surveyQuestions = fakeDiv.getElementsByClassName('question');
    console.log(surveyQuestions);
    surveyPageData = surveyQuestions[1].innerHTML;
    console.log(surveyPageData);
}

如果你正在使用jQuery,这是一个很好的做法,我推荐这个:

http://plnkr.co/edit/Rr5UtYcHNTUf0cEMf9pc(按Run并查看main.js)