2013-10-16 160 views
11

我收到以下錯誤:jquery ajax readystate 0 responsetext status 0 statustext error給予它時:url(http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm),但它在我的本地主機上給它url(localhost:""/embparse_page)時正常工作。jquery ajax readystate 0 responsetext status 0 statustext錯誤

我嘗試過使用我在Google搜索中找到的標題,並且也使用了beforeSend:"",但它仍然無法正常工作。

我覺得主要的問題是:XMLHttpRequest cannot load http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm. Origin "local server" is not allowed by Access-Control-Allow-Origin.但我不明白。

任何人都可以請向我解釋這個問題,因爲我對此很陌生。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns:ng="http://angularjs.org"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta Access-Control-Allow-Origin="*" /> 
    <title>Page Parsing</title> 
    <script type="text/javascript" src="/js/jquery-1.9.1.min.js"></script> 
    <script> 
    getit=function(){ 
     jQuery.support.cors = true; 
     $.ajax({ 
      type:"GET", 
      url:"http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm", 
      dataType:"html", 
      crossDomain:true, 
      beforeSend: function(xhr) { 
       xhr.overrideMimeType('text/plain;charset=UTF-8'); 
      }, 
      success:function(XMLHttpRequest,jqXHR ,data) { 
       //alert(data.title); 
       var starttitl=data.lastIndexOf('<title>'); 
       var endtitl=data.lastIndexOf('</title>'); 
       var title1=data.substring(starttitl+7,endtitl); 
       alert(title1); 
      }, 
      error:function(errorStatus,xhr) { 
       alert("Error"+JSON.stringify(errorStatus)); 
      } 
     }); 
    } 
    </script> 
</head> 
<body> 
    <div id="siteloader"> 
     <input type="button" onclick="getit()" /> 
    </div> 
</body> 
</html> 
+4

一個提示:不要使用警報,因爲它是調試最刺激的方式。嘗試'console.log'並在Chrome中按F12或者在Firefox中控制+ shift + k以打開控制檯。您可以使用許多工具,例如設置斷點並使用請求和響應標頭檢查請求。 – HMR

+0

您的建議 –

+0

最精彩的答案對這個職位的感謝先生是深度漂亮:http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

回答

16

我得到這個錯誤,在我的情況下,這不是由於相同的原產地政策。我得到了一些幫助,從this link

我的情況是,我有一個鏈接按鈕,我並沒有使用e.PreventDefault()

ASPX

<asp:LinkButton ID="lnkSearch" runat="server" CssClass="DockCmdSearch" CommandName="Search" OnClientClick="return VerifySearch(this, event);" /> 

的Javascript

function VerifySearch(sender, e) {   
    e.preventDefault(); 
    $.ajax({ 
       type: 'POST', 
    ............. 
    } 
    return false; 
} 
+0

這篇文章的評分最高的答案很深入:http:// stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

0

相同的來源政策。當你在

http://site1.com 

連接到瀏覽器不允許:

site2.com 
sub.site1.com 
site1:99.com 
https://site1.com (not sure about this one) 

這讓現場1不能從站點2竊取內容,並假裝這是site1的內容。圍繞這個方法是JSONP(谷歌地圖使用,我認爲)和site2提供cors頭,但Cors不支持在jQuery 1. *(也許不在2. *),因爲IE瀏覽器實施它有一些問題。在這兩種情況下,您需要site2與您的網站合作,以便您的網站可以顯示其內容。

如果你只是自己使用這個,那麼你可以使用Firefox並安裝forcecors插件。要激活你可以選擇視圖=>工具欄=>添加欄,然後點擊屏幕右下角的文字「cors」。

+0

但是我們可以做到這一點概念(可以通過使用cURL()在php中訪問site1的內容)。因此,如果在JavaScript中有這樣的東西,請告訴我 –

+0

@DhirenderTyagi如果site2不希望你的網站顯示它的內容或想要,但不夠關注,通過PHP代理是一個選項創建一個JSON API。這不能在JavaScript中完成,因爲JavaScript在瀏覽器中運行,並且它是執行相同原始策略的瀏覽器,以保護網站不會在其他網站上呈現和呈現其內容。至少使用代理方法,site2可以檢測來自同一IP的大量請求。 – HMR

-3

我正在測試txt/XML文件json/xml數據,並得到一個錯誤...值讀取:\ WINDOWS \ SYSTEM32 \:Status[0] & readyState[0]StatusText[error];這是成功的Internet Explorer,但無法在Chrome,因爲域需要相同

這是固定的,

轉到C工作驅動程序\等\主機

把名字對你的本地主機的應用程序:

127.0.0.1 SampleSiteName.com 

現在在Chrome中打開代碼http://SampleSiteName.com/YourAjaxFileName.htm(如果它打開,這意味着你已經輸入了一個正確的主機名) 去你的HTML文件,並給出你正在嘗試讀取的文件的相對地址(如果FileToBeRead.txtYourAjaxFileName.htm位於同一文件夾中,則只需輸入url:「 /FileToBeRead.txt「)

現在,您的代碼將在Chrome正常工作。

+0

我不明白這是如何從遠程站點獲取內容的。您的ajax請求只會循環回到您的本地機器,因爲它會將刪除的域名解析爲127.0.0.1。 – Adrian

+1

在stackoverflow上,爲了在你的文章中創建一個新行,你必須使用'
'或者創建2個新行。看我的編輯。 –

+0

哎呀抱歉,我遲到了 – Adrian

0

我從我的Ajax調用中得到了這個錯誤,並且爲我修復了這個錯誤,只是把它放在'return false'中。

相關問題