【问题标题】:AJAX Response Text EmptyAJAX 响应文本为空
【发布时间】:2013-11-22 17:16:17
【问题描述】:

我正在创建一个使用 AJAX 与 Minecraft 服务器交互的系统。我的 JavaScript 代码如下:

function doMessage(name, message)
    {
        var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","http://duncan.usr.sh/omnicraft/api/broadcast-msg.php?message=" + message + "&user=" + name,false);
xmlhttp.send();
document.getElementById("response").innerHTML=xmlhttp.responseText;
}

我的PHP代码如下:

<?php
header('content-type: text/plain');

echo "OmniCraft/Api/RequestHTTP";

if($_GET['message'] == "" or ctype_space($_GET['message']) or $_GET['user'] == "" or ctype_space($_GET['user']))
{

    echo "\nOmniCraft/Api/Request/Failed";
    echo "\nRequest invalid: No message specified";
    exit;
}

include_once '../MinecraftQuery.class.php';

    $Query = new MinecraftQuery( );

    try
    {
        $Query->Connect( 'localhost', 25565 );

    $info = $Query->GetInfo( );





    }
    catch( MinecraftQueryException $e )
    {
        echo "\nOmniCraft/Api/Request/Failed";
    echo "\nServer not online";
    exit;
    }

include_once("rcon.class.php"); //Include this file
$r = new rcon("127.0.0.1",25575,"notRealPasswordHere"); //create rcon object for server on the rcon port with a specific password
if($r->Auth()) //Connect and attempt to authenticate
{
$message = $_GET['message'];
$user = $_GET['user'];
$r->rconCommand("/tellraw @a {'text':'<$user using OmniMessage> $message','color':'white'}"); //send a command
echo "\nOmniCraft/Api/Request/Success";
echo "\nMessage sent successfully!";
}
else
{
echo "\nOmniCraft/Api/Request/Failed";
echo "\nUnable to authenticate to RCON";
exit;
}

?>

我的表格如下:

<form >
    <div class="input">
    <input type="text" placeholder="Message" style="padding: 20px 28px;font-size: 25px;" required="true" name="message">
    </div>
    <div class="input">
    <input type="text" placeholder="Name" style="padding: 20px 28px;font-size: 25px;" required="true" name="name">
    </div>

    <button class="btn btn-large btn-success" type="button" onclick="doMessage(this.form.name.value, this.form.message.value)">Send</button>
    <div>
    <p class="lead" id="preview">&lt; using OmniMessage&gt;</p>
    <div>
    <div id="response">
    </div>

AJAX 查询执行良好,除了 responseText 变量似乎不包含响应文本(即,ID 为“response”的 DIV 在查询完成后仍为空)。

响应DIV的正确内容应该是:

OmniCraft/Api/RequestHTTP
OmniCraft/Api/Request/Success
Message sent successfully!

但是,事实并非如此。我做错了什么?

编辑:更多信息:

我收到以下错误:

[20:14:21.855] NS_ERROR_FAILURE:失败@http://omnicraft.duncan.usr.sh/omnimessage/:154

第 154 行是:xmlhttp.send(); (或者可能是document.getElementById("response").innerHTML=xmlhttp.responseText;

【问题讨论】:

  • 文件中的代码上方是否有任何空白?因为在 php 5.3+(我相信)中,它被解析并立即发送到服务器。此外,如果您从 ajax 调用返回数据,您应该使用 $ret = 'msg' 然后继续连接 $ret .= '\n other message'; 直到您准备好 return $ret;
  • 您的页面是从duncan.usr.sh 域运行的吗?
  • 没有。这有关系吗?我认为它不会,因为实际的 PHP 代码会被执行并且可以工作。我使用了表格。只是响应文本似乎没有出现。
  • 是的。您需要在服务器上启用Cross-origin resource sharing (CORS)
  • 是的,如果您无法控制服务器。

标签: javascript html ajax dom


【解决方案1】:

尝试删除 PHP 代码中的标头调用。我遇到了一个非常相似的问题,只有当我不再通过 PHP 发出 Content-Type 标头时才会消失。

【讨论】:

    【解决方案2】:

    试试这个
    你还没有处理onreadystatechange

    function doMessage(name, message) {
    var xmlhttp; 
    if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
    } else {
    // code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    }
     xmlhttp.open("GET","http://duncan.usr.sh/omnicraft/api/broadcast-msg.php?message=" + message + "&user=" + name,false); 
    xmlhttp.send(); 
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("response").innerHTML=xmlhttp.responseText;
        }
      }
    }
    

    【讨论】:

    • 我没有使用异步 AJAX(尽管我可能应该)。这就是为什么在xmlhttp.send() 中是false,而不是true
    猜你喜欢
    • 2016-03-27
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多