这是一个jQuery错误吗? $ .post vs $ .ajax

时间:2011-08-11 17:25:20

标签: php javascript jquery

更新:我的代码可能会令人困惑并且包含错​​误。但这就是我要用$ .ajax和$ .post做的事情 ----我想将JSON发送到php并接收纯文本。但是$ _POST是空的< -why?-----

如果我使用$ .ajax,我发现$ _POST为空,但在使用$ .post时包含正确的内容 更新:要求 - 我需要使用JSON请求。但是问题是$ _POST在php中是空的,请参阅Var_dump 这是我的剧本

    <script>
    $(document).ready(function(){
        $("#submit").click(function(){
            $.ajax({
                type: "POST",
                url: "Ajax_example.php",
                data: {"field": $("#field").val()},
                contentType: "application/json; charset=utf-8", 
                success: function(msg){
                    alert("NEW DATA:"+msg);
                }
            });
    /*      $.post("Ajax_example.php", {"field": $("#field").val()}, 
                    function(msg){
                        alert("NEW DATA:"+msg);
                    });*/
            return false;
        })

    });
    </script>

这是我的php

    <?php

    echo var_dump($_POST);


    ?>

使用上述内容,$ .post部分是评论。运行$ .ajax部分时,它仅警告“NEW DATA:” 但是,如果我反过来这样做,我会得到我放在#field

中的任何东西

3 个答案:

答案 0 :(得分:4)

您错误地使用了$.ajax()data $.ajax参数包含在字符串中。试试这个:

$.ajax({
    type: "POST",
    url: "Ajax_example.php",
    data: {field: $("#field").val() },
    success: function(msg){
        alert("NEW DATA:"+msg);
    }
});

答案 1 :(得分:1)

在你说不起作用的部分,你需要花费很大的精力来为你的数据创建一个字符串,但是在你说的部分工作中,你传递的是一个对象文字(首选)。修复$ .ajax部分以将对象文字作为data选项传递。

您还传递contentType选项,但没有dataType选项。使用以下代码块中的任一版本:

$( function()
{
    $( '#submit' ).click( function( e )
    {
        /**
          THIS
         */
        $.ajax( {
            type: 'POST',
            url: 'Ajax_example.php',
            data: {
                field: $( '#field' ).val()
            }
            success: function( msg )
            {
                alert( 'NEW DATA:' + msg );
            },
            dataType: 'json'
        } );

        /**
          IS THE SAME AS THIS
         */
        $.post( // type implied in method name
            // url
            'Ajax_example.php',
            // data
            {
                field: $( '#field' ).val()
            },
            // success
            function( msg )
            {
                alert( 'NEW DATA:' + msg );
            },
            // dataType
            'json'
        );

        /**
          DON'T RETURN FALSE...CONTROL YOUR EVENT INSTEAD
         */
        e.preventDefault();
    } );
} );

答案 2 :(得分:0)

您的数据位于$ receive变量中,而不是$ _POST。尝试:

<?php
    $receive=file_get_contents('php://input');
    $receive=json_decode($receive, TRUE);
    echo $receive['field'];
?>