这里就是我试图完成的任务。我有一个形式,使用jQuery使阿贾克斯呼吁PHP文件。PHP文件的交互数据库,然后创建的网页内容返回的AJAX响应;即这一页面内容写入一个新的窗口成功的功能 $.ajax 呼叫。作为一部分的页面内容返回的PHP文件,我有一个简单HTML脚本标记,有一个JavaScript文件。具体而言:

<script type="text/javascript" src="pageControl.js"></script>

这不是回荡在php(虽然我已经试过了,),只html。的pageControl.js 是在同一个目录,作为我php文件,该文件产生的内容。

不管我怎么尝试,我似乎无法得到的 pageControl.js 文件包括或工作中产生的新的窗口,创造成功响应在阿贾克斯的电话。我端上的错误,如"对象"或变化不定,导致我认为该文件是不能包括在内。如果我复制JavaScript直接进入php文件,而不是使用脚本标记与src,我可以得到它的工作。

是不是有什么我在这里失踪有关范围的决议之间调用的文件,php,并延阿贾克斯?我想要包括javascript文件这样的未来,并希望了解我在做什么错误的。


你好再次:

我曾在这个问题,仍然没有运气。我要尝试,并澄清我在做什么,也许,这将带来一些东西进入脑海。我是包括有些代码的要求,帮助澄清事情一点。

这是序列:

  1. 用户选择的某些选项,并提交的点击按钮在的形式。
  2. 本形式按一下按钮是处理由。,看起来是这样的:

    $(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
    

这个代码进行的AJAX呼吁PHP文件(文件process_report_request.php)创建网页内容为新的窗口。这些内容取自数据库和HTML。在PHP文件我想要包括另一javascript文件中的头javascript使用的新的窗口。我想它包括如下

<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>

改变了路径文件夹的名字来保护无辜:)

的pageControl.js 文件实际上是在同一文件夹中的文件。和php文件,但我在尝试全面的道路是安全的。 我还能够访问js文件使用的网址浏览器和我可以成功地包括它在一个html静态测试页使用脚本来源的标记。

后javascript文件包含在php文件,我们呼吁它的一个职能如下(从php echo):

 echo '<script type="text/javascript" language="javascript">writePageControls();</script>';

因此,一旦php文件发送所有的页面内容回到阿贾克斯打电话,然后新的窗口打开,并返回的内容是书面来文。上面。

writePageControls 线是我的错误"的错误:目预期"当我运行的网页。 然而,由于JavaScript工作现在这两个HTML静态网页和当包括"内联"在PHP文件,它是导致我认为这是一个路径问题。

再次,不管我怎么尝试,我的电话功能pageControls.js 文件不起作用。 如果我把内容pageControl.js 文件在php文件之间的剧本标签和改变什么,它作为预期。

基于什么你们中的一些已经说过的,我想知道如果路径解决新打开的窗口,是不正确的。但我不明白为什么因为我使用的完整的路径。还有混淆问题甚至更多,我相联系的样式表中的工作得很好,从PHP文件。

抱歉怎么长的这是的,但是如果任何人有时间来看看这进一步,我将不胜感激。我难倒。 我是个新手的时候到了很多的这个, 所以如果只有一个更好的方式来做到这一点,并避免这个问题,我所有的耳朵(或眼睛我想...)

有帮助吗?

解决方案

我也有问题,与一个类似的问题,这是一个真正的头痛的问题。以下做法可能不是优雅,但它为我工作。

  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();

    }

祝你好运!

其他提示

它可能不是找你觉得它想要抓住你的javascript文件。

尝试一种相对于服务器的格式是这样的:

<script src="/some/path/to/pageControl.js"></script>

如果仍然不是工作,确认你可以型的url你的脚本文件为你浏览和下载。

确保你已经在或者 <head><body> HTML网页。此外,我会仔细检查的路径。js文件。你可以做的是,通过粘贴"pageControl.js"在你的网址。

寻找的东西:

  • 使用萤火虫(净tab)检查,如果js文件载有的状态 200.还要检查在控制台标签的任何javascript错误。
  • 你使用 HTML5离线.如果你做的,也许它提供一个缓存的版本,不包括你 <script> 标记。
  • 查看网页源,并确保它包括的 script 标记。
  • 改变源属于绝对路径: <script src="http://www.example.com/js/pageControl.js" type="text/javascript"></script>
  • 访问 http://www.example.com/js/pageControl.js 并确保它显示了正确的。
  • 尝试把 <script> 右后 <head> 因此,它加载的第一个。

这是所有我能想到的。

你可以动态加载脚本通过创造元素,然后添加到头或其他元件:

reportWindow.document.write(pageContent);                      
var script = document.createElement('script');
script.src = 'pageControl.js';
script.type = 'text/javascript';
reportWindow.document.getElementsByTagName('head')[0].appendChild(script);
reportWindow.document.close();

你有没有尝试采用延 $("#target_div").load(...) 这也执行JS内的输出...

阅读这医生要找出如何使用它:

http://api.jquery.com/load/

对我来说这听起来像你期待一个卸载脚本到工作。

尝试把一个看看这里: http://ensure.codeplex.com/SourceControl/changeset/view/9070#201379

这是一位javascript,确保脚本是装载之前,访问是尝试。你可以使用这个或者懒惰的负载量(装载javascript文件只在需要时),或者,正如我解释你的问题,载入一个脚本基于结果的阿贾克斯的电话。

怎么可能发生的情况是,你在回应一个串通过的ajax回调,不插入一个元素。外脚本需要第二获得通话载的内容,这是不会发生-只有第一个电话发生的。因此,当第一呼吁包括联的代码,该DOM没有作出额外获得请求,以获取的内容。如果DOM没有看到脚本,DOM不执行它,这意味着它只是一些随机的标签。

有一个非常快速的方式找出来。在铬(或火狐与萤火的插件安装),检查控制台>脚本拉看到所有的装脚本。如果它没有列出,这是没有装载和脚本标记你看到的标记是否是惰性的。

由于这可能只是一串尽PHP关心,你能创造它作为PHP DOM目,并插入正常(尽管这可能是艰苦).相反,也许 把它结束时的一页,刚刚结束前体标签。 (这是首选的位置js无论如何死去之后,所有其他元素在网页上载有并提供给DOM。)

禾田:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top