jquery ajax readystate 0 responsetext status 0 statustext 错误

Posted

技术标签:

【中文标题】jquery ajax readystate 0 responsetext status 0 statustext 错误【英文标题】:jquery ajax readystate 0 responsetext status 0 statustext error 【发布时间】:2013-10-24 02:11:53 【问题描述】:

我收到以下错误:jquery ajax readystate 0 responsetext status 0 statustext error 给它时:url(http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm),但是当我在我的本地主机上给它url(localhost:""/embparse_page) 时它工作正常。

我尝试使用在 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>

【问题讨论】:

一个提示:不要使用警报,因为它是最烦人的调试方式。尝试console.log 并在 Chrome 中按 F12 或在 Firefox 中按 control + shift + k 打开控制台。你有很多工具可以使用,比如设置断点和检查请求及其请求和响应标头。 感谢先生的建议 这篇文章中评分最高的答案非常深入:***.com/questions/15005500/… @HMR,没有警报,如果您在 ios 设备上进行测试并且没有 Mac 进行任何远程调试,您有什么建议? 【参考方案1】:

我收到此错误,在我的情况下,这不是由于同源政策。我从this link 那里得到了一些帮助。其他可能的原因见here。

我的情况是,我有一个链接按钮,但我没有使用 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;

【讨论】:

这篇文章中评分最高的答案非常深入:***.com/questions/15005500/…【参考方案2】:

同源政策。当你打开时浏览器不允许

http://site1.com

连接到:

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

这是为了让site1 不能从site2 窃取内容并假装它是site1 的内容。解决此问题的方法是 JSONP(我认为使用谷歌地图)并让 site2 提供 cors 标头,但 jQuery 1.* 不支持 cors(可能在 2.* 中也不支持),因为 IE 在实现它时存在一些问题。在这两种情况下,您都需要 site2 与您的网站合作,这样您的网站才能显示其内容。

如果您只自己使用它,那么您可以使用 Firefox 并安装 forcecors 插件。要激活,您可以选择视图 => 工具栏 => 添加栏并单击屏幕右下角的文本“cors”。

【讨论】:

但是我们可以使用 cURL() 在 php 中实现这个概念(可以从 site1 访问 site2 的内容)。所以如果javascript中有类似的东西请告诉我 是的,您可以通过您的服务器代理请求,但您违反了从中获取内容的站点的 ip 属性。一些大型超市网站这样做了,当另一个网站检测到它时,他们向超市网站提供了虚假信息,其中包括被砍头之类的图片。这是一种有趣而有效的方式,它也可能是一个律师敲你的门 @DhirenderTyagi 如果 site2 不希望您的站点显示其内容或想要但不关心创建 JSON API,则可以选择通过 php 进行代理。这不能在 JavaScript 中完成,因为 JavaScript 在浏览器中运行,并且是浏览器强制执行同源策略以保护站点不被其他站点获取和呈现其内容。至少使用代理方法site2可以检测到来自同一IP的大量请求。 同源政策不是为了保护知识产权。它总体上是一个安全功能。更多信息:security.stackexchange.com/questions/8264/…【参考方案3】:

我从我的 Ajax 调用中得到了这个错误,而为我解决这个问题的方法就是输入“return false”。

【讨论】:

【参考方案4】:

我对 nginx(服务器端)和 AngularJs(用户端)有同样的问题 正如其他开发人员所说的 Cors 问题,在这里我只想说我如何解决我的问题,也许有人使用这种方法;) 首先,我在我的 Nginx 配置文件中添加了以下几行(在 linux -> /etc/nginx/sites-available/your domain 中):

    add_header Access-Control-Allow-Origin *;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

并且使用 angularJs 我这样发送我的请求:

        $http(
            method: "POST",
            data:  //params,
            url: "//address",
            headers:  //if its form data
                "Accept": "application/json",
                "Content-Type": "application/x-www-form-urlencoded",
                "Cache-Control": "no-cache"
            ,
            crossDomain: true,
            contentType: false,
            processData: false
        ).then(function mySucces(response) 
            alert(JSON.stringify(response));
        , function myError(response) 
            alert("error");
        );

【讨论】:

【参考方案5】:

我正在测试读取 json/xml 数据的 txt/XML 文件并收到错误...读取的值:Status[0] &amp; readyState[0]StatusText[error]; 这在 Internet Explorer 上成功运行,但在 Chrome 上却没有,因为 域必须相同

这就是修复它的原因

转到 C:\WINDOWS\system32\drivers\etc\hosts

为您的 localhost 应用命名:

127.0.0.1   SampleSiteName.com

现在在chrome中打开代码为http://SampleSiteName.com/YourAjaxFileName.htm(如果打开就说明你输入了正确的主机名) 转到您的HTML 文件并提供您要读取的文件的相对地址(如果FileToBeRead.txtYourAjaxFileName.htm 在同一文件夹中,则只需输入url:“/FileToBeRead.txt”)

现在您的代码也可以在 Chrome 上运行。

【讨论】:

我不明白这如何从远程站点获取内容。您的 ajax 请求只会循环回您的本地计算机,因为它将删除域名解析为 127.0.0.1。 在 *** 上,要在帖子中换行,您必须使用 &lt;br&gt; 或换行 2 行。查看我的编辑。 哎呀抱歉我来晚了

以上是关于jquery ajax readystate 0 responsetext status 0 statustext 错误的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 的 ajax 方法,返回结果 readyState=4 并且 status=200 时,还进 error 方法

ajax基础

ajax与jQuery的异步提交,他在啥情况下会走error

ajax基础入门

iOS CORS ajax 请求 readyState 0

Jquery通过Ajax方式来提交Form表单