2017-02-05 251 views
0

我写了一个简单的代码: 登录页面,我试图发送用户名到php页面。不能POST,405方法不允许

当我点击提交登录页面,我收到405方法不允许。

如果我使用get方法 - 它的工作,但我想发布,因为我想发送用户和传递到服务器不在地址。

HTML文件:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <script 
    src="https://code.jquery.com/jquery-3.1.1.min.js" 
    integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" 
    crossorigin="anonymous"></script> 
    <script src="mainjs.js"></script> 
</head> 
<body> 

<form> 
    First name:<br> 
    <input id="fname" type="text" name="firstname" value="Mickey"> 
    <br> 
    Last name:<br> 
    <input id="lname" type="text" name="lastname" value="Mouse"> 
    <br><br> 
    <input type="submit" value="Submit" onclick="testfunc();"> 
</form> 

<div id='result'></div> 
<p>If you click the "Submit" button, the form-data will be sent to a page called "action_page.php".</p> 

</body> 

JavaScript: 

function testfunc(){ 
    alert("MainJS"); 
    var fname = $('#fname').val(); 
    var lname = $('#lname').val(); 

    $.post('getdata.php', {fname:fname, lname:lname}, function(data){ 
     alert(data); 
     $('#result').html(data); 
    }); 
} 

PHP文件:

<?php 
    header('Access-Control-Allow-Origin: *'); 
    header("Access-Control-Allow-Headers: Origin, X-Requested-With,Content-Type, Accept"); 
    header('Access-Control-Allow-Methods: GET, POST, PUT'); 
    echo "Success"; 
?> 

谢谢!

回答

0

我无法用405方法不允许的消息复制您的问题,但我有一种感觉,它与您在PHP文件中发送的那些标头有关。我不知道你为什么要发送这些内容,因为我没有看到你想要完成的原因。

如果你真的需要从PHP文件发送这些头,这个答案可能没有帮助。我尝试了下面的步骤,并能够得到我认为是您所需的功能。

首先,让我们的结束标记之前将你的脚本到右:

<script 
    src="https://code.jquery.com/jquery-3.1.1.min.js" 
    integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" 
    crossorigin="anonymous"></script> 
<script src="mainjs.js"></script> 
</body> 

然后,让删除的onclick并给予提交按钮,我们可以从JavaScript,而不是抢ID:

<input type="submit" value="Submit" id="submit"> 

接下来,在mainjs.js文件,你应该选择提交按钮,然后添加一个事件侦听器,它与旧testfunc()的内容:

var submit = document.getElementById('submit'); 

submit.addEventListener('click', function(event) { 
    event.preventDefault(); 
    alert("MainJS"); 
    var fname = $('#fname').val(); 
    var lname = $('#lname').val(); 

    $.post('getdata.php', {fname:fname, lname:lname}, function(data){ 
     alert(data); 
     $('#result').html(data); 

    }); 
}); 

请注意,'事件'作为参数传递给addEventListener中的匿名事件处理函数。您必须在此事件上调用preventDefault(),以便表单不会提交,这会重新加载整个页面。

我不知道你在你的PHP文件在做什么,但这里是我访问getdata.php:

<?php 

if ($_REQUEST['fname'] == 'Mickey' && $_REQUEST['lname'] == 'Mouse') { 
    $username = 'Disney'; 
    echo $username; 
} 

当然,你应该改变任何用户名的查找方案已制定。当我点击提交时,我看到'迪斯尼'出现在#result div的HTML页面中,我认为这是你想要的功能。