Car*_*ton 7 javascript php ajax jquery script-tag
这是我想要完成的.我有一个使用jQuery对PHP文件进行AJAX调用的表单.PHP文件与数据库交互,然后创建页面内容以作为AJAX响应返回; 即,该页面内容被写入$.ajax呼叫成功函数中的新窗口.作为PHP文件返回的页面内容的一部分,我有一个简单的HTML脚本标记,其中包含一个JavaScript文件.特别:
<script type="text/javascript" src="pageControl.js"></script>
这不是在PHP中回应(虽然我已经尝试过),它只是html.pageControl.js与生成内容的php文件位于同一目录中.
无论我尝试什么,我似乎都无法将pageControl.js文件包含在内,或者在为响应AJAX调用成功而创建的新窗口中工作.我最终得到像"预期的对象"或未定义的变量之类的错误,这让我相信文件没有包含在内.如果我将JavaScript直接复制到PHP文件中,而不是将脚本标记与src一起使用,我可以使它工作.
这里有关于调用文件,php和jQuery AJAX之间的范围解析的东西吗?我将来希望以这种方式包含javascript文件,并希望了解我做错了什么.
再次问好:
我已经解决了这个问题,但仍然没有运气.我将尝试澄清我在做什么,也许这会带来一些想法.我根据要求提供了一些代码,以帮助澄清一些事情.
这是序列:
单击表单按钮由jQuery代码处理,如下所示:
$(document).ready(function() {
  $("#runReport").click(function() {
    var report = $("#report").val();
    var program = $("#program").val();
    var session = $("#session").val();
    var students = $("#students").val();
    var dataString = 'report=' +report+ 
                     '&program=' +program+
                     '&session=' +session+
                     '&students=' +students;
    $.ajax({
        type: "POST",
        url: "process_report_request.php",
        cache: false,
        data: dataString,
        success: function(pageContent) {
            if (pageContent) {
                $("#result_msg").addClass("successMsg")
                    .text("Report created.");
                var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes";
                // open a new report window
                var reportWindow = window.open("", "newReportWindow", windowFeatures);
                // add the report data itself returned from the AJAX call
                reportWindow.document.write(pageContent);
                reportWindow.document.close();
            }
            else {
                $("#result_msg").addClass("failedMsg")
                    .text("Report creation failed.");
            }
        }
    }); // end ajax call
    // return false from click function to prevent normal submit handling
    return false;
  }); // end click call    
}); // end ready call
此代码对PHP文件(process_report_request.php)执行AJAX调用,该文件为新窗口创建页面内容.此内容取自数据库和HTML.在PHP文件中,我想在新窗口中使用javascript包含另一个javascript文件.我想把它包括如下
<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>
更改路径文件夹名称以保护无辜:)
pageControl.js文件实际上与jQuery代码文件和php文件位于同一文件夹中,但我正在尝试完整路径只是为了安全.我也可以使用浏览器中的URL访问js文件,我可以使用脚本src标记将其成功包含在静态html测试页面中.
在javascript文件包含在php文件中之后,我调用了它的一个函数,如下所示(来自php的echo):
 echo '<script type="text/javascript" language="javascript">writePageControls();</script>';
因此,一旦php文件将所有页面内容发送回AJAX调用,则打开新窗口,并通过上面的jQuery代码将返回的内容写入其中.
该writePageControls行是我在运行页面时收到错误"Error:Object expected"的地方.但是,由于JavaScript在静态HTML页面中工作正常,并且在PHP文件中包含"内联"时,它使我认为这是某种路径问题.
同样,无论我尝试什么,我对pageControls.js文件中的函数的调用都不起作用.如果我将pageControl.js文件的内容放在脚本标记之间的php文件中并且不做任何其他更改,它会按预期工作.
根据你们有些人已经说过的话,我想知道新打开的窗口的路径分辨率是否不正确.但我不明白为什么因为我正在使用完整的路径.另外,为了使问题更加混乱,我的链接样式表在PHP文件中运行得很好.
抱歉这是多久,但如果有人有时间进一步研究这个问题,我将非常感激.我很难过.当涉及到很多这方面的时候我是新手,所以如果有更好的方法来做到这一点并避免这个问题,我全都是耳朵(或者我认为是眼睛......)
我也遇到过类似的问题,这真是令人头疼。下面的方法可能不太优雅,但它对我有用。
例如,在您的 ajax 成功中:
success: function(pageContent) {
        var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes";
        var reportWindow = window.open("", "newReportWindow", windowFeatures);
        // boilerplate
        var boilerplate = "<html><head></head><body></body></html>";
        reportWindow.document.write(boilerplate);
        var head = reportWindow.document.getElementsByTagName("head")[0];
        var jquery = reportWindow.document.createElement("script");
        jquery.type = "text/javascript";
        jquery.src = "http://code.jquery.com/jquery-1.7.min.js";
        head.appendChild(jquery);
        var js = reportWindow.document.createElement("script");
        js.type = "text/javascript";
        js.src = "/folder1/folder2/folder3/pageControl.js";
        js.onload= function() {
            reportWindow.$("body").html(pageContent);
        };
        head.appendChild(js);
        reportWindow.document.close();
    }
祝你好运!