0

我目前正在测试一些代码,基本上是尝试将 HTML 表单重定向到 AJAX 调用 (POST),该调用显示在我的服务器上运行的脚本的响应。

HTML

<form id='form' name='qform' method='post' action='./resources/comment-redirect.php'>

<input type='search' name='name' class='comment-instance' autofocus='autofocus' value='name' />

<input type='search' name='email' class='comment-instance' autofocus='autofocus' value='email (not published)' />

<TEXTAREA name='comment-box' class='comment-instance' COLS=60 ROWS=5 value='email' />

<button type='submit' id='comment-submit' value='Submit'>--SUBMIT--</button>

</form>

JAVASCRIPT

$('#comment-submit').click(function(e){
         e.preventDefault();

         console.log("User clicked");
         jQuery.ajax({
             type:'POST',
             url: './resources/comment-redirect.php',
             data: {'name':$('[name=name]').val().toString(), 'email':$('[name=email]').val().toString(), 'comment':$('[name=comment-box]').val().toString() },
             dataType: 'json',
             success: function(result){
             console.log(result);
            }

         }); //end of JQuery.Ajax()



//PHP
if( !empty($_GET['a'] ) )
{
    print("This request has been routed to GET\n");
}
else if( !empty($_POST) )
{
    print("This request has been routed to POST\n");
    print($_POST);
}
else
{
    print("Other");
}

所以目前,在控制台窗口中我得到“用户点击”,这意味着回调确实有效 - 但是没有 AJAX 响应。我使用了浏览器并手动测试了我的 PHP 脚本并且也通过了(GET 和 POST)。所以由于某种原因,这个 Ajax 调用似乎没有被触发。

任何帮助将不胜感激堆栈。

4

1 回答 1

0

您已经type:'POST'在 ajax 请求中进行了设置,但在服务器端您正试图从中获取发送的数据$_GET,所以首先,在您的php代码中,您不需要检查$_GET数组,因为您知道,您正在将数据发送到$_POST数组。

你有这个

data: {
    'name':$('[name=name]').val().toString(),
    'email':$('[name=email]').val().toString(),
    'comment':$('[name=comment-box]').val().toString()
}

只要去掉.toString(),它已经是字符串,即使文本框包含数值,它也被视为字符串。

你有dataType: 'json'但你没有打印json stringjson string看起来像这样

'{"key1":"value1","key2":"value2"}'

所以,你的完整代码(jQuery)应该是这样的

$('#comment-submit').click(function(e){
    e.preventDefault();
    console.log("User clicked");
    $.ajax({
        type:'POST',
         url:'./resources/comment-redirect.php',
         data:{
             'name':$('[name=name]').val(),
             'email':$('[name=email]').val(),
             'comment':$('[name=comment-box]').val()
         },
         dataType: 'json',
         success: function(result){
              // Will output a JavaScript object (if a json string is returned)
             console.log(result);
         }
     });
});

在服务器端,如果您不返回(打印)a,则使用类似这样的方式json string更改或返回有效值dataTypehtmljson string

echo json_encode(array('key1' => 'value1', 'key2' => 'value2'));

因此,在您的success回调中,您将获得一个JavaScript对象并可以像使用它一样

success:function(result){
    console.log(result.key1); // will output value1
    console.log(result.key2); // will output value2
}

如果url正确,那么它应该可以工作。根据您当前的代码,它可能是

if( !empty($_POST) )
{
    // everything in $_POST array will be encoded as a json string
    echo json_encode($_POST);
}

如果你想添加

print("This request has been routed to POST\n");

在你的json string,那么你可以试试这个

$_POST['msg'] = 'This request has been routed to POST';
echo json_encode($_POST);

在成功回调中,您可以像这样获取字符串(msg)

console.log(result.msg); // will output "This request has been routed to POST"
于 2013-10-25T17:07:29.613 回答