无法处理jQuery ajax提交的简单表单

时间:2015-03-02 18:30:31

标签: javascript php jquery ajax forms

我的表单

<form id="new-protocol-form" method="post" role="form">
  <textarea name="text"></textarea>
</form>

我的jquery ajax

$('#submitProtocol').click(
    function() {
        $.ajax({
            type:    "POST",
            url:     "newProtocol.php",
            data:    $('#new-protocol-form').serialize(),
            success: function() { alert{'ok'} },
            error:   function() { alert('error'); }
        });
    }
);

我的 newProtocol.php

<script>
    alert(<?php echo $_POST['text']; ?>);
</script>

显示了由ajax“success”方法触发的带有“ok”文本的警报窗口,但是我无法从newProtocol.php文件获取具有$_POST['text']值的警报窗口。在javascript控制台中没有错误。

2 个答案:

答案 0 :(得分:1)

您需要使用$_POST['text']。你在不应该使用的地方使用括号。

此外,由于您使用的是AJAX,因此您可能不希望导航到其他页面。如果不阻止默认行为,则成功函数中的警报将永远不会触发。

newProtocol.php

<?php
    echo $_POST['text'];
?>

的jQuery

$('#submitProtocol').click(function(event) {
        event.preventDefault(); // stop the default click behavior
        $.ajax({
            type:    "POST",
            url:     "newProtocol.php",
            data:    $('#new-protocol-form').serialize(),
            success: function(data) { 
                console.log(data); // show the text being returned 
            },
            error:   function() { console.log('error'); }
        });
    }
);

另外,quit using alert()用于获取返回值和故障排除。

答案 1 :(得分:0)

首先,$_POST不是函数,它是一个数组。所以它应该是$_POST['text']。另外,

<script>
    alert(<?php $_POST('text'); ?>);
</script>

不会像您期望的那样创建警报,因为异步请求不会在目标页面中运行任何javascript。

由于您正在尝试测试AJAX是否正常工作,因此最好的方法是检查该请求返回的日期。例如:

//...
success: function(data) { console.log(data) },
//...