Ajax 回调不起作用


ajax callback not working

我似乎无法从中得到回调,但它得到了响应,这是一个简单的测试。 任何人都知道为什么它不能按照我的意愿去做

<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使它尽可能短

这里

也可以尝试更改$.ajax$.post,以便您可以指定错误回调。 无论如何,$.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'添加到请求中。

这似乎是由于同源策略和 MDN 文档

端口号由浏览器单独保存。对资源库的任何调用(包括 document.domain = document.domain(都会导致端口号被 null 覆盖。因此,不能通过仅在第一个中设置 document.domain = "company.com" 来 company.com:8080 与 company.com 交谈。必须在两者中设置它,以便端口号均为空。

所以这就是你在回复中所说的空

的原因

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

$(document(.ready(function(e( {    $("button"(.click(function(( {        var msg = $("#txt"(.val((;        $.post(            "http://localhost/bot.php",            {msg: msg},            函数(数据,状态( {                $("p"(.text(data(;            },            数据类型:"jsonp"        );    });});

进一步阅读 这里.

希望有帮助。