即使在使用ob_start后也无法修改标头信息?

时间:2014-03-24 10:11:47

标签: php ajax

我从服务器上的php文件收到警告,不确定是什么问题。我正在从我的javascript函数到服务器进行ajax调用,它在xmlhttp.readyState == 4 && xmlhttp.status == 200中没有收到任何响应。

我尝试对位于我的本地计算机上的php文件/ mysql数据库进行相同的调用,但它不适用于远程主机。另外,我在服务器上有一个类似的php文件,只有select子句不同,它在那里工作不确定这里有什么问题?

  

警告:无法修改标头信息 - 已发送的标头   (输出始于   /home2/marshell/public_html/cfv/getuserpostbybusnumber.php:2)in   第4行/home2/marshell/public_html/cfv/getuserpostbybusnumber.php

<?php
ob_start();
header("Access-Control-Allow-Origin: *");
$q = intval($_GET['q']);



$con=mysqli_connect("localhost","ma","Ad","mars","3306");

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM cfv_viewbusupdate WHERE  BusNumber = ".$q."   ORDER BY DatePosted DESC");

  while($row = mysqli_fetch_array($result))
  {

  echo "<P>";
  echo "<B><font color=\"3300CC\">#" . $row['DatePosted'] . "</font></B> --";
  echo "" . $row['username'] . " posted </br>";
  echo "<B>Bus Number . </B>";
  echo "<font color=\"CC0033\">" . $row['BusNumber'] . "</font></br><B> Going towards </B>";
  echo "<font color=\"CC0033\">" . $row['Direction'] . "</font></br> <B>Stop Name: </B>";
  echo "<font color=\"CC0033\">" . $row['StopNames'] ."</font></br><B> Time </B><font color=\"CC0033\">".$row['time']." </font></br><B> Status </B>";
  echo "<font color=\"CC0033\">" . $row['Status'] . "</font> ";
  echo "</br> <B> Comment's  </B>: <font color=\"CC0033\">" . $row['comments'] . "</font>";
  echo "</P>";
  echo "<hr> ";
  }

mysqli_close($con);

?>

function updateUserPost(str) {




    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {

         if (xmlhttp.readyState < 4) {
                 showModal();
              } 


        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {


            //  $('#select-choice-direction-foruserpost').html(xmlhttp.responseText).selectmenu( "refresh");
              hideModal();
             document.getElementById("result").innerHTML = xmlhttp.responseText;
            //alert(xmlhttp.responseText); 


        }
    }

    xmlhttp.open("GET", "http://www.xyz.uni.me/cfv/getuserpostbybusnumber.php?q="+str, true);


    xmlhttp.send();

}

1 个答案:

答案 0 :(得分:1)

当存在空格时会发生此问题,大多数情况下它位于<?php<?标记之前,有时则位于其中一个包含文件中,大部分时间位于文件末尾。确保你没有这些空间。显示的错误消息将指向您的位置。

我认为必须对编码做一些事情。我遇到过这个问题,而开发环境基于Windows的大部分时间都是WAMP(工作正常),其中生产环境是基于linux的(发生问题)。人们通常建议使用文件编码为"UTF-8 without BOM" Notepad ++有此选项。 FTP客户端改变了一些时间编码,也检查了设置。

我注意到WAMP实例在php.ini文件中有以下配置,忽略了已经通过缓冲输出发送错误的标头。

output_buffering = On

如果在本地环境中将其更改为关闭,则可能会看到标题已发送错误。

output_buffering = Off