Javascript 代码无法在使用 AJAX 加载的 PHP 页面上运行

标签 javascript php jquery ajax flot

我正在尝试使用 jQuery flot 创建条形图。我已在第一页中包含了所有必需的文件(jQuery)。现在,我使用 AJAX 加载第二个 PHP 页面并在 DIV 中显示内容。 PHP 部分的所有内容都工作正常,但 JavaScript 无法工作。如果我包含所需的文件并在同一页面中编写代码,则它工作正常。我已经检查了第二页的所有内容都在第一页的 body 标记内。

首页:

<script src="js/jquery-1.8.3.js" type='text/javascript'></script>  
<script type="text/javascript" src="js/flot/jquery.flot.js"></script>    
<script type="text/javascript" src="js/flot/jquery.flot.symbol.js"></script>
<script type="text/javascript" src="js/flot/jquery.flot.axislabels.js"></script>
<div id="placeholder" style="width:100%;">

首页上的 Ajax 调用

<script type="text/javascript">

    var action = document.getElementById('action').value;
    var from_date = document.form1.from_date.value;
    var to_date = document.form1.to_date.value;
    var marketname = document.form1.marketname.value;

    var url="lib/reports/SaleItemSales.php?srchtxt="+srchtxt+"&from_date="+from_date+"&to_date="+to_date+"&view="+view+"&page="+page+"&iip="+iip;

    xmlhttp.open("POST",url,true);
    xmlhttp.send();     

    xmlhttp.onreadystatechange=function()
    {
        if(xmlhttp.readyState==0 || xmlhttp.readyState==1 || xmlhttp.readyState==2 || xmlhttp.readyState==3)
        {
            document.getElementById('load').style.display="block";
        }
        if(xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var resp=xmlhttp.responseText;
            document.getElementById('placeholder').innerHTML=resp;
            document.getElementById('load').style.display="none";
        }   
    }

</script>

第二页

<div style="width:80%;height:500px;text-align:center;margin:10px">        
    <div id="flot-placeholder" style="width:100%;height:100%;"></div>        
</div>

<script language="javascript" type="text/javascript">
var data = [[-0.2, 11],[0.8, 15],[1.8, 25],[2.8, 24],[3.8, 13],[4.8, 18]];
var data2 = [[0.2, 14],[1.2, 17],[2.2, 40],[3.2, 14],[4.2, 19],[5.2, 23]];
var data1 = [[0, 14],[1, 17],[2, 40],[3, 14],[4, 19],[5, 23],[6, 23],[7, 23],[8, 23],[9, 23],[10, 23],[11, 23],[12, 23],[13, 23],[14, 23],[15, 23],[16, 23],[17, 23],[18, 23],[19, 23],[20, 23],[21, 23],[22, 23],[23, 23],[24, 23],[25, 23]];

var dataset = [{ label: "Number of Orders", data: data, color: "#AA0000" },{ label: "Number of Items", data: data1, color: "#00AA00" },{ label: "Amount", data: data2, color: "#0000AA" }];
var ticks = [[0, "19 Jan 2015"], [1, "20 Jan 2015"], [2, "21 Jan 2015"], [3, "22 Jan 2015"],[4, "23 Jan 2015"], [5, "24 Jan 2015"], [6, "19 Jan 2015"],[7, "19 Jan 2015"],[8, "19 Jan 2015"],[9, "19 Jan 2015"],[10, "19 Jan 2015"],[11, "19 Jan 2015"],[12, "19 Jan 2015"],[13, "19 Jan 2015"],[14, "19 Jan 2015"],[15, "19 Jan 2015"],[16, "19 Jan 2015"],[17, "19 Jan 2015"],[18, "19 Jan 2015"],[19, "19 Jan 2015"],[20, "19 Jan 2015"],[21, "19 Jan 2015"],[22, "19 Jan 2015"],[23, "19 Jan 2015"],[24, "19 Jan 2015"],[25, "19 Jan 2015"]];

var options = {
series: {
    bars: {show: true},
},
bars: {
    align: "center",
    barWidth: 0.2
},
xaxis: {
    axisLabel: "Date",
    axisLabelUseCanvas: true,
    axisLabelFontSizePixels: 12,
    axisLabelFontFamily: 'Verdana, Arial',
    axisLabelPadding: 10,
    ticks: ticks,
    tickLength:0,
},
yaxis: {
    axisLabel: "No of Orders, No of Items and Amount",
    axisLabelUseCanvas: true,
    axisLabelFontSizePixels: 12,
    axisLabelFontFamily: 'Verdana, Arial',
    axisLabelPadding: 3,
    tickFormatter: function (v, axis) {
        return v + "";
    }
},
legend: {
    noColumns: 0,
    labelBoxBorderColor: "#000000",
    position: "nw"
},
grid: {
    hoverable: true,
    borderWidth: 1,
    backgroundColor: { colors: ["#ffffff", "#EDF5FF"] }
}
};

$(document).ready(function (){
    $.plot($("#flot-placeholder"), dataset, options);
    $("#flot-placeholder").UseTooltip();
});

function gd(year, month, day) {
    return new Date(year, month, day).getTime();
}

var previousPoint = null, previousLabel = null;

$.fn.UseTooltip = function () {
$(this).bind("plothover", function (event, pos, item) {
    if (item) {
        if ((previousLabel != item.series.label) || (previousPoint != item.dataIndex)) {
            previousPoint = item.dataIndex;
            previousLabel = item.series.label;
            $("#tooltip").remove();

            var x = item.datapoint[0];
            var y = item.datapoint[1];    
            var color = item.series.color;    
            //console.log(item.series.xaxis.ticks[x].label);                

            showTooltip(item.pageX, item.pageY, color,
                "<strong>" + item.series.label + "</strong><br>" + item.series.xaxis.ticks[x].label + " : <strong>" + y + "</strong> °C");
        }
    } else {
        $("#tooltip").remove();
        previousPoint = null;
    }
});
};

function showTooltip(x, y, color, contents) {
$('<div id="tooltip">' + contents + '</div>').css({
    position: 'absolute',
    display: 'none',
    top: y - 40,
    left: x - 120,
    border: '2px solid ' + color,
    padding: '3px',
    'font-size': '9px',
    'border-radius': '5px',
    'background-color': '#fff',
    'font-family': 'Verdana, Arial, Helvetica, Tahoma, sans-serif',
    opacity: 0.9
}).appendTo("body").fadeIn(200);
}
</script>

最佳答案

使用 innerHTML 插入的 JavaScript 不会自动执行。您可以使用类似

来检查
document.getElementById('placeholder').innerHTML = '<script type="text/javascript"> alert("test"); </script>';

要使用 AJAX 加载 HTML 和 JavaScript 并执行它,请使用 load()来自 jQuery 的方法。将 AJAX 调用脚本中 var url = ... 之后的所有内容替换为

    $('#load').show();
    $('#placeholder').load(url, function() {
        $('#load').hide();
    });

关于Javascript 代码无法在使用 AJAX 加载的 PHP 页面上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734076/

相关文章:

php - 如何检查项目数组是否仅包含此项?

php - beanstalkd - 保留但未完成的作业会怎样?

javascript - 单引号内的单引号会导致错误

Javascript:点击按钮后输入

javascript - 我需要使用 JavaScript 在所有 <td> 和 <th> 标签中插入 <span> 标签

php - 无法获取 Bootstrap 布局上列的内容以与列左侧对齐

javascript - JQuery Datepicker 到 PHP 变量没有形式

javascript - 对象[对象对象]没有方法 'autocomplete'

javascript - 热衷于直接使用 ViewState 或其他方法来更新回发数据来清除隐藏字段?

javascript - Twitter except_replies=true count=5 未返回 5 条推文