【问题标题】:Calling an external PHP file within a local JavaScript file?在本地 JavaScript 文件中调用外部 PHP 文件?
【发布时间】:2012-04-08 01:14:55
【问题描述】:

我的网站上有一个 HTML 表单,可以提交所有信息(按下提交后),同时保持在同一页面上。 JavaScript 文件启用此功能,因此在您填写并按下提交后,模块会消失并表示感谢您提交您的信息,同时保留在同一页面上。

现在,在启用该功能的 JS 中,我必须调用发送表单的实际 PHP。

当它位于我的服务器内部时,那行代码如下所示:

 var result= postData(data,'./form.php"');      
 if (result !=null){
     $('#form').html('<img src="./images/thankyou.png"></img>');

现在这很完美。我不得不将那个 PHP 移到另一个服务器 http://www.somesite.com/php/action.php

我怎么能称它为 PHP 呢?我试过了

var result= postData(data,'http://www.somesite.com/php/form.php"'); 

它确实有效。让它发挥作用的最简单方法是什么?

【问题讨论】:

    标签: php javascript html external


    【解决方案1】:

    这就是您使用 AJAX 的目的。这些答案假设您在同一个域上工作。

    简单的方法

    使用 AJAX 最简单的方法是使用 jQuery,但这并不是绝对必要的(见下文)。 http://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jquery

    通用示例:

    $.ajax({
      url: "test.html",
      context: document.body
    }).done(function() { 
      $(this).addClass("done");
    });
    

    http://api.jquery.com/jQuery.ajax/

    不太容易的方法

    如果你不想使用 jQuery,你可以不用它。 http://www.webreference.com/programming/javascript/ajax_forms/index.html

    示例 HTML

    <p><html><br/>
    <head><br/>
    <title>Form Posts with Ajax</title><br/>
    <script type="text/javascript" src="js/Ajax.js"></script><br/>
    <script type="text/javascript" src="js/Post.js"></script><br/>
    </head><br/><br/>
    <body><br/><br/>
    <form action="bridge.php" method="post" onsubmit="Post.Send(this); return false;"><br/>
    Name:<br/><input type="text" name="name" /><br/>
    <br/><br/><br/>
    Message:<br/><textarea name="message"></textarea><br/>
    <br/><input type="submit" value="submit" /><br/>
    </form><br/><br/>
    </body><br/>
    </html></p>
    

    示例 JavaScript

        var Ajax = new Object();
        Ajax.isUpdating = true;
        Ajax.Request = function(method, url, query, callback)
        {
            this.isUpdating = true;
            this.callbackMethod = callback;
            this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP");
            this.request.onreadystatechange = function() { Ajax.checkReadyState(); };
            if(method.toLowerCase() == 'get') url = url+"?"+query;
            this.request.open(method, url, true);
            this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            this.request.send(query);
        }
        Ajax.checkReadyState = function(_id)
        {
            switch(this.request.readyState)
            {
                case 1: break;
                case 2: break;
                case 3: break;
                case 4:
                    this.isUpdating = false;
                    this.callbackMethod(this.request.responseXML.documentElement);
            }
        }
    

    【讨论】:

    • 为 AJAX 加载 jQuery 似乎有点过头了。
    • 所以你是说我需要重做整个表格?没有简单的解决方法吗?
    • @user755889 不,您的表单不必更改。您只需要添加一些 JavaScript 来拦截提交并使用 AJAX 发送它。请查看我发布的链接。
    • @Francisc - 我希望他不是在建立一个只提交表单的网站,仅此而已。大多数从事专业开发的开发人员最有可能构建复杂的应用程序,这意味着有很多机会可以利用 jQuery 的强大功能和速度。如果这只是一个学术练习,一个人只是提交一个表单而不是其他任何东西,那么当然,坚持 JS 可以是一个很好的学习体验。
    • @Francisc:对我来说,在这种情况下使用“普通”javascript 而不是 jQuery 提供的易用性、简单性、优雅性和可扩展性,似乎有点矫枉过正。例如,您可以轻松地链接到 Google 的 CDN 库(最新的缩小版本只有大约 90 KB),并且您的访问者很可能已经从该 CDN 加载了 jQuery。此外,如果将来需要,您还可以将其用于其他效果。即使您是“纯”javascript 方面的专家,您的开发时间、工作量和代码大小也难以与 jQuery 开发相比。
    【解决方案2】:

    听起来您正试图将表单数据从一个域上下文提交到另一台服务器。您可以使用 JSONP 或跨域 JavaScript 来执行此操作。

    function sendFormData(urlToSendTo) {
        var script = document.createElement("script");
        script.setAttribute("type","text/javascript");
        script.setAttribute("src", urlToSendTo);
        document.getElementsByTagName("head")[0].appendChild(script);
    }
    
    $('form').click(function() {
        src="http://www.example.com/php/action.php?name=" + $(this).find('[name="name"]').val() + "&email=" + $(this).find('[name="email"]');
        sendFormData(src);
        return false;  // if this doesn't work, try event.preventDefault();
    });
    

    如果您确实尝试将数据从在http://domain.com 加载的网页发送到托管在http://example.com 上的 PHP 页面,这是您无需重新加载页面即可将数据发送到服务器的唯一方法。如果 PHP 页面在同一台服务器上,那么 @msigman 发布的其他解决方案将起作用。

    【讨论】:

    • 懦弱的反对票是怎么回事?走出隐藏并解释你认为这有什么问题:)
    • 我还得到了一个神秘的反对票...也许有人只是度过了糟糕的一天。
    【解决方案3】:

    试试这个方法:

    在您的本地服务器中:&lt;script type="text/javascript" src="path/to/external/php/file"&gt;&lt;/script&gt;

    并修改php文件:

     <?
    Header("content-type: application/x-javascript");
    //your php codes here as normal
    //your dispalying resoursec here in this format: echo "document.write(\"what you want to display\")";
    ?>
    

    这个外部 php 文件会输出一个 javascript 文件到你的本地服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多