2013-01-22 88 views
0

我的電腦上有一個本地apache 2.2服務器。我在我的系統上使用PHP 5和MySQL 5.0。我在我的MySQL數據庫中創建了一個名爲html5的表,它有一列和一行包含任意字符串。無法在Firefox和Chrome中從PHP頁面獲取XML響應

我創建了一個名爲sample.php的PHP頁面,它連接到我的MySQL數據庫並提取上表的信息並將其作爲XML文件返回。

<?php 
    if(!$dbconnect = mysql_connect('localhost', 'root', 'password')) { 
     echo "Connection failed to the host 'localhost'."; 
     exit; 
    } // if 
    if (!mysql_select_db('mysampledb')) { 
     echo "Cannot connect to database 'mysampledb'"; 
     exit; 
    } // if 

    $table_id = 'html5'; 
    $query = "SELECT * FROM $table_id"; 
    $dbresult = mysql_query($query, $dbconnect); 

    // create a new XML document 
    $doc = new DomDocument('1.0'); 

    // create root node 
    $root = $doc->createElement('note'); 
    $root = $doc->appendChild($root); 

    // process one row at a time 
    while($row = mysql_fetch_assoc($dbresult)) 
    { 
     // add node for each row 
     $occ = $doc->createElement($table_id); 
     $occ = $root->appendChild($occ); 

     // add a child node for each field 
     foreach ($row as $fieldname => $fieldvalue) 
     { 
      //create child element in xml file 
      $child = $doc->createElement($fieldname); 
      $child = $occ->appendChild($child); 

      //add database content into the child element created above 
      $value = $doc->createTextNode($fieldvalue); 
      $value = $child->appendChild($value); 

     }// foreach 
    }// while 

    // get completed xml document 
    $xml_string = $doc->saveXML(); 
    echo $xml_string; 
?> 

我曾經在一個單獨的目錄,使一個簡單的請求以上PHP頁面按鈕的點擊,並試圖搶響應,並顯示爲警告創建的HTML5頁面。

這是HTML5頁面: -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <script type="text/javascript" src="jquery.js"></script> 
    </head> 
    <body>   
     <button onclick="myFunc()">Click me</button> 
     <script type="text/javascript"> 
      function myFunc() 
      {    
       $.ajax(
        { 
         url:"http://localhost/sample.php"+"?randVar="+Math.random(), 
         type: "GET", 
         dataType: "text/xml", 
         success:function(result) 
         { 
          alert(result); 
         } 
        }); 
      } 
     </script> 
    </body> 
</html> 

但是當我運行此頁我得到的只有在IE9的響應。在Firefox和Chrome中,我看到爲空警報

在嘗試這種方式之前,我也嘗試過使用XMLHttpRequest對象,但即使如此,我只能在IE9上獲得響應。

function myFunc() 
{ 
    var xmlhttp, xmlDoc; 
    if (window.XMLHttpRequest) 
    { 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    try 
    {     
     xmlhttp.open("GET","http://localhost/sample.php"+"?randVar="+Math.random(),false); 
     xmlhttp.send(); 
     xmlDoc=xmlhttp.responseText; 
    } 
    catch(e) 
    { 
     alert(e.message); 
    }    
    alert(xmlDoc); 
} 

在Firefox中,catch塊返回 「失敗」,並在Chrome中,警報說XMLHttpRequest的異常101

PS: -

  1. 保持HTML文件相同的htdocs文件夾的sample.php頁面將解決這個問題,但其中服務器是一個獨立的計算機上它不可能在現實世界不同的網絡。所以我不在尋找這個建議。

  2. 在ajax調用中,使async =「true」或「false」沒有任何區別。

這是IE9的響應: - Alert Message

螢火蟲: - Firebug

任何人都可以請您提供一個解決方案嗎?我需要一個不好的。

+0

你可以張貼在螢火/ Chrome檢查的控制檯Ajax請求的響應? –

+0

卡蘭,我得到的答覆200好。 – Kumar

+0

也許看看Cross Origin資源共享 - > http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing – Crisp

回答

0

將在你的PHP文件中的以下標題:

header('Content-Type: text/xml, charset=utf-8'); 
+0

沒有幫助Karan .. :-( – Kumar

0

更改數據類型和嘗試。

它只支持:dataType (default: Intelligent Guess (xml, json, script, or html))

$.ajax(
       { 
        url:"http://localhost/sample.php"+"?randVar="+Math.random(), 
        type: "GET", 
        dataType: "xml", 
        success:function(result) 
        { 
         alert(result); 
        } 
       }); 

編號:http://api.jquery.com/jQuery.ajax/

+0

只是檢查你的螢火蟲控制檯,你可以看到迴應數據在那裏,即使它不能警報 –

+0

Prasanth,改變數據類型根本沒有顯示任何警報,而在IE9中,它產生一個錯誤「對象不支持屬性或方法」 – Kumar

+0

在Firebug中,響應是200好,但無論如何它說XML解析錯誤。 – Kumar