为什么我的<script>标签不能从php文件中运行?(jQuery也参与其中)

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>
Run Code Online (Sandbox Code Playgroud)

这不是在PHP中回应(虽然我已经尝试过),它只是html.pageControl.js与生成内容的php文件位于同一目录中.

无论我尝试什么,我似乎都无法将pageControl.js文件包含在内,或者在为响应AJAX调用成功而创建的新窗口中工作.我最终得到像"预期的对象"或未定义的变量之类的错误,这让我相信文件没有包含在内.如果我将JavaScript直接复制到PHP文件中,而不是将脚本标记与src一起使用,我可以使它工作.

这里有关于调用文件,php和jQuery AJAX之间的范围解析的东西吗?我将来希望以这种方式包含javascript文件,并希望了解我做错了什么.


再次问好:

我已经解决了这个问题,但仍然没有运气.我将尝试澄清我在做什么,也许这会带来一些想法.我根据要求提供了一些代码,以帮助澄清一些事情.

这是序列:

  1. 用户选择一些选项,然后单击表单上的提交按钮.
  2. 单击表单按钮由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
    
    Run Code Online (Sandbox Code Playgroud)

此代码对PHP文件(process_report_request.php)执行AJAX调用,该文件为新窗口创建页面内容.此内容取自数据库和HTML.在PHP文件中,我想在新窗口中使用javascript包含另一个javascript文件.我想把它包括如下

<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

更改路径文件夹名称以保护无辜:)

pageControl.js文件实际上与jQuery代码文件和php文件位于同一文件夹中,但我正在尝试完整路径只是为了安全.我也可以使用浏览器中的URL访问js文件,我可以使用脚本src标记将其成功包含在静态html测试页面中.

在javascript文件包含在php文件中之后,我调用了它的一个函数,如下所示(来自php的echo):

 echo '<script type="text/javascript" language="javascript">writePageControls();</script>';
Run Code Online (Sandbox Code Playgroud)

因此,一旦php文件将所有页面内容发送回AJAX调用,则打开新窗口,并通过上面的jQuery代码将返回的内容写入其中.

writePageControls行是我在运行页面时收到错误"Error:Object expected"的地方.但是,由于JavaScript在静态HTML页面中工作正常,并且在PHP文件中包含"内联"时,它使我认为这是某种路径问题.

同样,无论我尝试什么,我对pageControls.js文件中的函数的调用都不起作用.如果我将pageControl.js文件的内容放在脚本标记之间的php文件中并且不做任何其他更改,它会按预期工作.

根据你们有些人已经说过的话,我想知道新打开的窗口的路径分辨率是否不正确.但我不明白为什么因为我正在使用完整的路径.另外,为了使问题更加混乱,我的链接样式表在PHP文件中运行得很好.

抱歉这是多久,但如果有人有时间进一步研究这个问题,我将非常感激.我很难过.当涉及到很多这方面的时候我是新手,所以如果有更好的方法来做到这一点并避免这个问题,我全都是耳朵(或者我认为是眼睛......)

dev*_*oms 3

我也遇到过类似的问题,这真是令人头疼。下面的方法可能不太优雅,但它对我有用。

  1. 确保你的 php 文件只输出你想要的内容
  2. 动态添加jquery到窗口头
  3. 动态地将任何外部脚本文件添加到窗口头部
  4. 在窗口文档上使用 jQuery html 来调用 html() 以及主体上加载的内容,以便评估脚本。

例如,在您的 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();

    }
Run Code Online (Sandbox Code Playgroud)

祝你好运!