【问题标题】:jquery ajax get responsetext from http urljquery ajax从http url获取responsetext
【发布时间】:2009-07-20 09:58:01
【问题描述】:

两者都没有:

var response = $.ajax({
    type: "GET",   
    url: "http://www.google.de",   
    async: false,
    success : function() {
        alert (this);
    }
});

也不:

var response2 = $.get("http://www.google.de", function(data) {
    alert("Data Loaded: " + data);
});

给我一​​个对象。如何访问responseText

【问题讨论】:

    标签: jquery ajax get response responsetext


    【解决方案1】:

    你必须像这样重写它:

    var response = '';
    $.ajax({ type: "GET",   
             url: "http://www.google.de",   
             async: false,
             success : function(text)
             {
                 response = text;
             }
    });
    
    alert(response);
    

    【讨论】:

    • 它是空的 -> 没有响应 - 但是为什么?
    • @all - 除非域启用了 jsonp,否则跨域 ajax 不起作用 - 谷歌没有
    • 即使使用 jsonp 兼容的 API,这也不起作用,因为 jQuery 似乎不想将 ajax 请求同步到其他域......所以请求是异步的。这真的,真的很无聊... :-/
    • 这也好不到哪里去,唯一的区别是你在哪里提醒用户变量的值。此外,OP 列出的第二个选项使用了 $.get,默认情况下它是异步的。如果他将您的逻辑与事件处理程序之外的警报一起使用,无论请求是否成功,它都会始终返回 ''。
    • 这甚至不是正确的 jsonp 语法。为了让 jQuery 使用 JSONP,它需要在 url 中有一个回调参数,这个例子没有。
    【解决方案2】:

    正如 Karim 所说,除非服务器允许,否则跨域 ajax 不起作用。在这种情况下,谷歌没有,但是,在许多情况下,有一个简单的技巧可以解决这个问题。只需让您的本地服务器传递通过 HTTP 或 HTTPS 检索到的内容。

    例如,如果您使用的是 PHP,您可以:

    使用以下命令创建文件 web_root/ajax_responders/google.php:

    <?php
      echo file_get_contents('http://www.google.de');
    ?>
    

    然后更改您的代码以连接到该代码,而不是直接在 javascript 中连接到 Google 的域:

    var response = $.ajax({ type: "GET",   
                            url: "/ajax_responders/google.php",   
                            async: false
                          }).responseText;
    alert(response);
    

    【讨论】:

      【解决方案3】:

      首先您必须下载一个 JQuery 插件以允许跨域请求。 在这里下载:https://github.com/padolsey/jQuery-Plugins/downloads

      将名为 query.xdomainsajax.js 的文件导入到您的项目中,并将其包含在以下代码中:

      <script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script>
      

      要以文本形式获取外部网页的 html,您可以这样写:

      $.ajax({
          url: "http://www.website.com",
          type: 'GET',
          success: function(res) {
              var text = res.responseText;
              // then you can manipulate your text as you wish
          }
      });
      

      【讨论】:

      • 与这个问题完全无关,但我想你可能会觉得 this JSFiddle 很有趣。这与您昨天发布的问题有关。
      【解决方案4】:

      在 jquery ajax 函数中,成功回调签名为:

      function (data, textStatus) {
        // data could be xmlDoc, jsonObj, html, text, etc...
        this; // the options for this ajax request
      }
      

      根据您询问的数据类型,使用“dataType”参数,您将获得“数据”参数。

      来自文档:

      dataType (String) 默认值:智能猜测(xml 或 html)。 您期望从服务器返回的数据类型。如果没有指定,jQuery 将根据响应的 MIME 类型智能地将 responseXML 或 responseText 传递给您的成功回调。

      可用的类型(以及作为第一个参数传递给成功回调的结果)是:

      "xml":返回一个可以通过 jQuery 处理的 XML 文档。

      "html":以纯文本形式返回 HTML;包含的脚本标签在插入 DOM 时进行评估。

      “script”:将响应评估为 JavaScript 并将其作为纯文本返回。除非使用选项“缓存”,否则禁用缓存。注意:这会将 POST 转换为远程域请求的 GET。

      “json”:将响应评估为 JSON 并返回一个 JavaScript 对象。

      “jsonp”:使用 JSONP 加载到 JSON 块中。将添加一个额外的“?callback =?”到 URL 的末尾以指定回调。 (在 jQuery 1.2 中添加)

      “text”:纯文本字符串。

      http://docs.jquery.com/Ajax/jQuery.ajax#options

      【讨论】:

      • 首先查看其他评论 - 响应为空 -> 没有 googleHtml 文本?!作为回应:-/
      【解决方案5】:

      据我所知,使您能够使用 ajax 跨域的唯一方法是 JSONP (http://ajaxian.com/archives/jsonp-json-with-padding)。

      这里有一篇文章发布了一些实现跨域ajax的各种技术(http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

      【讨论】:

        【解决方案6】:

        实际上,您可以使用 Firefox 进行跨域请求,请参阅此概览:http://ajaxian.com/archives/cross-site-xmlhttprequest-in-firefox-3

        Webkit 和 IE8 也以某种方式支持它。

        【讨论】:

          【解决方案7】:

          由于 jQuery AJAX 请求在跨域时会失败,因此您可以使用 cURL(在 PHP 中)设置代理服务器。

          假设一个 PHP 文件 responder.php 有以下内容:

          $url = "https://www.google.com";
          $ch      = curl_init( $url );
          curl_set_opt($ch, CURLOPT_RETURNTRANSFER, "true")
          $response= curl_exec( $ch );
          curl_close( $ch );
          return $response;
          

          您的 AJAX 请求应该发送到这个 responder.php 文件,以便它执行跨域请求。

          【讨论】:

            【解决方案8】:

            这个怎么样?

            $.get(some-url, some-data, function(d, s, x){
                // d is text response data
                // s is text status
                // x is a XMLHttpRequest object
                // so... you can code like that:
            
                console.log(x.responseText);
            })
            

            享受吧! :)

            【讨论】:

              【解决方案9】:

              这是超级旧的,但希望这对某人有所帮助。我正在发送带有不同错误代码的响应,这是我发现的唯一可行的解​​决方案

              $.ajax({
                  data: {
                      "data": "mydata"
                  },
                  type: "POST",
                  url: "myurl"
              }).done(function(data){
                  alert(data);
              }).fail(function(data){
                  alert(data.responseText)
              });
              

              由于JQuery弃用了successerror函数,你需要使用donefail,在fail时使用data.responseText访问数据,在fail时使用data访问数据在done

              【讨论】:

                【解决方案10】:

                试试这个

                alert( data['responseText'] );
                

                【讨论】:

                  猜你喜欢
                  • 2020-04-30
                  • 2023-03-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-10-20
                  • 2018-10-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-01-20
                  相关资源
                  最近更新 更多