ajax回调无法正常工作

时间:2013-08-13 09:57:10

标签: php javascript jquery html

我似乎无法从这个回调中工作,但它得到一个简单的测试响应。任何人都知道为什么它会像我想要的那样做

<script type="text/javascript">
$(document).ready(function(e) {
    $("button").click(function() {
        var msg = $("#txt").val();
        $.post(
            "http://localhost/bot.php",
            {msg: msg},
            function(data,status) {
                $("p").text(data);
            }
        );
    });
});
</script>

PHP,有没有人可以建议一个好的JavaScript工具来帮助我找到错误?

<?php

class ai
{
    private $msg;

    public function __construct($msg)
    {
        $this->msg = $msg;
    }

    public function respond()
    {
        switch($this->msg)
        {
            case "hi":
                echo "Hello Mr Brown How are You";
                break;
            case "fine":
                echo "Good to hear Did you know Zanda hard Coded me?";
                break;
            case "im fine":
                echo "Good to hear Did you know Zanda hard Coded me?";
                break;
            default:
                echo "??????????????????????????????" .
                     "That means i was extra rush prototype.......i cant answer that";
        }
    }
}

$talk = new ai($_POST['msg']);
$talk->respond();

?>


<div class="box">
<p>text</p>
<textarea id="txt"></textarea>
<button>click</button>
</div>

有html使它尽可能短

2 个答案:

答案 0 :(得分:1)

在此处尝试的是将$.post更改为$.ajax,以便您可以指定错误回调。无论如何,$.get$.post等只是$.ajax的缩写。尝试这样的事情:

("button").click(function() {
    var msg = $("#txt").val();
    $.ajax(
        url: "http://localhost/bot.php",
        data: {msg: msg},
        dataType: 'jsonp',
        success: function(data,status) {
            console.log(data, "returned with status:", status);
        },
        error: function(obj, status, error){
            console.log("Error!", obj, status, error);
        }
    );
});

仅仅因为你得到200回复并不意味着一切正常。所有这一切都说POST是成功的。您需要检查响应文本以查看是否返回任何错误。

编辑:在dataType: 'jsonp'中添加了请求。

答案 1 :(得分:0)

这似乎是由于同源政策和MDN documentation

  

端口号由浏览器单独保存。对setter的任何调用,包括document.domain = document.domain都会导致端口号被null覆盖。因此,只能在第一个中设置document.domain =“company.com”,无法使company.com:8080与company.com交谈。必须在两者中设置它以使端口号都为空。

因此,正如您在回复中所说,这就是您获得null的原因

尝试添加datatype:"jsonp"。它应该像这样工作。


$(document).ready(function(e) {
    $("button").click(function() {
        var msg = $("#txt").val();
        $.post(
            "http://localhost/bot.php",
            {msg: msg},
            function(data,status) {
                $("p").text(data);
            },
            dataType:"jsonp"
        );
    });
});

进一步阅读here

希望有所帮助。