【问题标题】:jQuery $.ajax works when $.post doesn'tjQuery $.ajax 在 $.post 不工作时工作
【发布时间】:2012-08-09 20:53:40
【问题描述】:

我只是想进行一个简单的 $.post 调用。

<body>
<div id="main">
    <div id="diver">
    </div>
    <form id="entry_field_container" action="" method="post" accept-charset="utf-8">
        <input type="text" name="entry_field" value="" id="entry_field">

        <input id="send" type="submit" value="send">
    </form>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        $('#send').click(function(e){
            e.preventDefault();
            var txt = $('#entry_field').val();
            $.post(
                'http://localhost/proc.php',
                {
                    name:'me',
                    text:txt
                },
                function(data){
                    console.log(data);
                    $('#diver').html(data)
                },
                'json'
            )

        })
    });
</script>

proc.php 内部:

<?php
    $name = $_POST['name'];
    $text = $_POST['text'];
    echo "{\"" . $name . "\", \"" . $text . "\"}";
?>

由于某种原因,POST 返回 200,但控制台永远不会返回 data,它只是空白。

我最难理解的是为什么这个 $.ajax 函数每次都有效。这不只是同一件事的一个更详细的例子吗?

$.ajax({
    'type':    'POST',
    'url':     'http://localhost/proc.php',
    'async':   true,
    'cache':   false,
    'global':  false,
    'data':    {
       'name':'me',
        'text':txt
    },
    'error': function(xhr,status,err){
        alert("DEBUG: status"+status+" \nError:"+err);
    },  
    'success': function(data){
        console.log(data);
    }   
});

【问题讨论】:

  • 您的数据是否会发送到服务器?使用 AJAX 视图(例如 Chrome 或 Safari 中内置的视图,或使用 Firefox+Firebug)进行检查。还要确保您没有任何 JS 错误或警告。
  • 我想是的,是的。在 Inspector 中,我可以查看 proc.php -> Preview 并看到 {"me", "the text"},所以看起来 proc.php 正在读取 POST 变量。

标签: jquery json post


【解决方案1】:

在您的 $.post 中,您告诉 jQuery 返回的文本是 JSON,但在您的 $.ajax 中,您不是。

$.post 失败,因为从 PHP 返回的文本不是有效的 JSON。

{"me", "test"}

这不是有效的 JSON。 {} 是一个对象,所以它需要键:

{"name": "me", "text": "test"}

或者,也许您想要一个数组 ([]):

["me", "test"]

附:在 PHP 中创建 JSON 时,强烈建议您使用 json_encode 而不是自己创建 JSON。

【讨论】:

  • 要添加到这一点,您可以通过jslint.com 运行您的输出,它会准确地告诉您输出有什么问题。
【解决方案2】:

您在 $.post 调用中指定了“json”格式,但在 $.ajax 调用中没有指定,可能是您没有返回有效的 JSON 响应,这就是您的 $.post 不是的原因执行它的成功方法?

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2014-05-07
    • 2013-08-02
    相关资源
    最近更新 更多