2013-10-16 140 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'中。

相关问题