php如何处理ajax post请求

时间:2014-04-05 17:34:08

标签: php jquery ajax

也许我不像我想的那样聪明但是我真的遇到了aJax和PHP相互交互的问题。我正在尝试制作一种保存方法。

这是我的PHP。我唯一的猜测是我没有检查正确的事情。

(这是一个名为edit.php的页面)

<?php
if(isset($_POST['text']) && isset($_GET['dir'])){
   $File = $_POST['location']; 
   $Handle = fopen($File, 'w') or die("can't open file");
   $Data = $_POST['text']; 
   fwrite($Handle, $Data); 
   fclose($Handle); 
}

?>

<input type="text" value="<?=$_GET['dir'];?>" id="saveValue"> 这是我按Ctrl and S

时调用的函数
    function saveFile(){
var data = new FormData();
    data.append('text', e.getSession().getValue());
    data.append('location',$('#saveValue').val());
var url = $('#saveValue').val(); 
var split = url.split('/public_html'); 
    alert(split[1]);
var url = "edit.php?dir="+split[1];
  $.ajax({
    url: url,
    type: "post",
    data: data,

    success: function (data, textStatus, jqXHR) {
        if (data == "false") {
            console.log("There is a problem on the server, please try again later");    
        } else {
                //Do something with what is returned
                console.log("failed");
        }
    }
});      
};

我认为我要么选错了,要么我没有提交我认为的我。 我可以得到一些帮助或者至少对此有所澄清。

我已经读过,我需要使用$_REQUEST['text']代替$_POST,但两者都没有效果。

3 个答案:

答案 0 :(得分:0)

IMO您试图混淆两种请求类型GET以及POST

AJAX调用中,您指定的网址不包含dir参数,因此条件isset($_POST['text']) && isset($_GET['dir'])失败。

您不能拥有edit.php?dir=foo因为您可以使用GET或POST`

的请求方法

您的服务器端脚本具有if()条件,以检查POST参数。正如@Marcel Gwerder所建议的那样,它就像if(isset($_POST['text']) && isset($_POST['location']))

很乐意提供帮助。

答案 1 :(得分:0)

我修复了我的代码错误。这就是我现在拥有的。

function getDir(){
var url = $('#saveValue').val(); 
    var split = url.split('/public_html'); 
    return split[1];
}; 


function saveFile(){
var datas = {
        'text': e.getValue(),
        'location':$('#saveValue').val()
        };
  $.ajax({
    url: "edit.php",
      type: 'POST',
      data: datas,
      success: function (data, textStatus, xhr) {
            errorReport(datas.toString());
      }
});      
};
function errorReport(data){
    var msg = document.createElement('p');
    msg.className = "msg";
    msg.innerHTML = data
    $('.error').append(msg);
    $('.msg').fadeIn('slow');
    setTimeout(function(){
        $('.msg').fadeOut("slow");
        $('.msg').remove();
    },9500);
};

对于我所拥有的一点点PHP,我现在有了这个。 据我所知,我没有通过表格发送正确的对象。

if(isset($_POST['text'])  && isset($_POST['location'])){
   $File = $_POST['location'];  
   $Handle = fopen($File, 'w') or die("can't open file");
   $Data = $_POST['text']; 
   fwrite($Handle, $Data); 
   fclose($Handle); 
} 

答案 2 :(得分:0)

使用带Ajax的POST请求时,需要设置一些标头

  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

这个标题让php想到作为表单提交提交的数据。现在,相应的数据可以在php中处理为普通的$ _POST []变量。