2012-04-08 79 views
1

我在我的网站上有一个HTML表单,它可以在同一页面上提交所有信息(按下提交后)。一个JavaScript文件启用了这个功能,所以在你填写完并按下提交后,模块将会消失,并表示感谢你提交你的信息,同时保留在同一页面上。在本地JavaScript文件中调用外部PHP文件?

现在,在启用该功能的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"'); 

它确实有效。使其工作的最简单方法是什么?

回答

3

这就是你会使用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); 
     } 
    } 
+0

加载用于AJAX的jQuery看起来像是一种矫枉过正。 – Francisc 2012-04-08 01:17:52

+0

所以你说我需要重做我的整个表单?有没有简单的方法呢? – user755889 2012-04-08 01:22:22

+1

@ user755889不,你的表格不应该被改变。您只需添加一些JavaScript来拦截提交并使用AJAX发送。请参阅我发布的链接。 – msigman 2012-04-08 01:24:13

0

这听起来像你正试图从一个域范围内提交表单数据到另一台服务器。您可以使用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发布的其他解决方案将可以工作。

+0

怯懦downvote是什么?出来隐藏,并解释你认为这是错误的:) – jmort253 2012-04-08 02:38:45

+1

我也有一个神秘downvote ...也许有人只是有一个糟糕的一天。 – msigman 2012-04-08 04:56:52

0

尝试用这种方式:

在本地服务器:<script type="text/javascript" src="path/to/external/php/file"></script>

并修改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文件到本地服务器。