4

これからコールバックが機能するようには見えませんが、簡単なテストで応答が得られます。なぜそれが私の思い通りにならないのか誰にもわからない

<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があります

4

2 に答える 2

1

ここでも試してみるべきことは、$.postforを変更して$.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'リクエストに追加されました。

于 2013-08-13T10:38:54.287 に答える
0

It seems like it is due to the Same Origin Policy and from the MDN documentation

The port number is kept separately by the browser. Any call to the setter, including document.domain = document.domain causes the port number to be overwritten with null. Therefore one can not make company.com:8080 talk to company.com by only setting document.domain = "company.com" in the first. It has to be set in both so that port numbers are both null.

So that is the reason you are getting null as you said in your responses

Try adding datatype:"jsonp". It shoudl work like this.

$(document).ready(function(e) {
    $("button").click(function() {
        var msg = $("#txt").val();
        $.post(
            "http://localhost/bot.php",
            {メッセージ: メッセージ},
            関数 (データ、ステータス) {
                $("p").text(データ);
            }、
            データ型:"jsonp"
        );
    });
});

さらに読むここ.

それが役立つことを願っています。

于 2013-08-13T10:37:37.253 に答える