Javascript 通过Ajax请求调用php函数

Javascript 通过Ajax请求调用php函数,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在努力使我的主页更加结构化。我必须大量使用mysql db查询,并且我希望为每个表创建一个自己的.php文件,其中包含我希望通过Ajax请求调用的所有必要函数 因此,我通过stackoverflow的回答得到了以下片段: $.ajax({ url: '/my/site', data: {action: 'test'}, type: 'post', success: function(output) {

我正在努力使我的主页更加结构化。我必须大量使用mysql db查询,并且我希望为每个表创建一个自己的.php文件,其中包含我希望通过Ajax请求调用的所有必要函数

因此,我通过stackoverflow的回答得到了以下片段:

$.ajax({ url: '/my/site',
         data: {action: 'test'},
         type: 'post',
         success: function(output) {
                      alert(output);
                  }
});
在服务器端,应读取
action
POST参数,相应的值应指向要调用的方法,例如:

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    switch($action) {
        case 'test' : test();break;
        case 'blah' : blah();break;
        // ...etc...
    }
}
我的问题:

我想通过data属性分配表单数据,但我不知道如何才能做到这一点。我尝试了以下方法(这只是一个猜测,不起作用):


您需要将数据指定为参数

var data = $(this).serialize();
$.ajax({ url: '/my/site',
         data: {action: 'test', data: data},
         type: 'post',
         success: function(output) {
                      alert(output);
                  }
});
ajax
调用的数据参数需要一个对象,如ECMA/Javascript规范中定义的,例如一系列键/值对

您可以通过
$\u POST['data']

就我个人而言,我倾向于json序列化它,以避免数组中的http怪癖

data: {action: 'test', data: JSON.stringify(data)}
然后在PHP中:

$data = json_decode(isset($_POST['data']) ? $_POST['data'] : "{}");

如果数据已发布,它现在将作为一个复杂对象出现在
$data
中,否则
$data
将包含一个空对象

您可以将数据发布为JSON对象

$.ajax({
    type: "POST",
    url: "/some/url",
    data: JSON.stringify(jsobject),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(output){
      alert(output);
    }
});
在php脚本中,您只需获取对象或关联数组。

serialize()
将以字符串形式从表单返回数据。您只需将字符串的其余部分附加到其余的查询中即可

例如:

<form id="form">
    <input name="form_name_1" value="form_value_1">
    <input name="form_name_2" value="form_value_2">
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    var data = $('#form').serialize();
    data += '&action=test';

    $.ajax({
        url: '/my/site',
        data:data,
        type:'post',
        success:function(output) {
            alert(output);
        }
    });
});
</script>

$(函数(){
var data=$('#form').serialize();
数据+='&操作=测试';
$.ajax({
url:“/my/site”,
数据:数据,
类型:'post',
成功:功能(输出){
警报(输出);
}
});
});

作为记录,这个问题的答案可以在几乎每一个PHP/jQuery Ajax教程中找到。。。
<form id="form">
    <input name="form_name_1" value="form_value_1">
    <input name="form_name_2" value="form_value_2">
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    var data = $('#form').serialize();
    data += '&action=test';

    $.ajax({
        url: '/my/site',
        data:data,
        type:'post',
        success:function(output) {
            alert(output);
        }
    });
});
</script>