1

嗨,我想将数据发送到服务器,然后让 php 文件保存它。但目前我什至无法让一个简单的 POST 工作。

这是 javascript 和 html 部分:此函数在头部声明:

function sendTableToServer(){
    var xhttp;
    if (window.XMLHttpRequest){
        xhttp=new XMLHttpRequest();
    } else {
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xhttp.open("POST","http://music.collwyncraig.info/hajimama/save_setlist.php",true);
    xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xhttp.send("fsong=AbandonSeoul");
}

然后这个 html 在正文中:

<button type="button" onclick="sendTableToServer()">Save Setlist</button>

这是php文件

<?php
if (isset($_POST["fsong"])){
    echo 'trying';
    $song = $_POST["fsong"]; 
    echo $song;
    echo 'ok';
}
?>

当我单击按钮时,什么也没有发生。如果我使用一个<form>和一个提交按钮,浏览器会加载 php 文件,我可以访问输入。但是,我想使用这样的函数,因为我要发送的信息将使用 javascript 和 HTML DOM 从 html 页面中取出。那么,为什么什么都没有发生呢?:)

4

4 回答 4

1

如果您不想使用 jQuery ajax,请尝试使用纯 ajax:

<html>
    <head>
    <script type="text/javascript">
    sendTableToServer()
    {

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
        else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        //document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","http://music.collwyncraig.info/hajimama/save_setlist.php?fsong=AbandonSeoul", true);
    xmlhttp.send();
    }
    </script>


<?php
if (isset($_GET["fsong"])){
    echo 'trying';
    $song = $_GET["fsong"]; 
    echo $song;
    echo 'ok';
}
?>

来源:http ://www.w3schools.com/php/php_ajax_php.asp

于 2012-04-07T05:04:54.587 回答
1

如果您想要与表单相同的行为,除了您想从页面获取数据,只需创建一个表单并提交它:

var form = document.createElement('form');
form.action = 'http://www.example.com/do-something';
form.method = 'post';
var song = document.createElement('input');
song.type = 'hidden';
song.name = 'song';
song.value = 'Song Name';
form.appendChild(song);
form.submit();
于 2012-04-07T05:05:42.020 回答
0

请记住,AJAX 本质上是异步的。您应该为完成和错误条件定义回调,因为您的数据不会立即返回。您可能需要关注这个关于 AJAX 的 Google 教程。JQuery 确实简化了这个过程,如果有的话。

如果您的唯一目标是将数据发送到服务器以写入文件,则不需要 AJAX 或 Javascript。只需设置<form action="http://music.collwyncraig.info/hajimama/save_setlist.php">并将要发送到服务器的数据放入表单标签中。为 AJAX 使用 Javascript 的唯一原因是“更好的行为”,这可能比您正在寻找的简单用法更复杂。

于 2012-04-07T05:05:23.263 回答
0

如果您向与地址栏中的内容不同的域进行 POST,它将失败。您不能发出跨域 AJAX 请求:

xhttp.open("POST","http://music.collwyncraig.info/hajimama/save_setlist.php",true);

尝试删除方案和域:

xhttp.open("POST","/hajimama/save_setlist.php",true);

这将使 POST 请求相对于当前域,因为这里不需要 http 和域。

于 2012-04-07T05:06:59.037 回答