【问题标题】:No error being displayed with GET request [duplicate]GET请求没有显示错误[重复]
【发布时间】:2020-02-02 00:43:32
【问题描述】:

我正在尝试显示此获取请求的结果,但它没有返回任何结果或错误。

即使在测试时,我也尝试过硬编码并附加 <li>my job</li>,但这也不起作用。

你有什么想法吗?

这是我的代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(function (){

  var $jobs = $('#jobs');

  $.ajax({
    type: 'GET',
    dataType: 'json',
    username: '5afe0f90-3480-4d47-8206-3529815a610a',
    password: '',
    crossDomain: true,
    url: 'http://www.reed.co.uk/api/1.0/search?keywords=construction&location=sheffield',
    success: function(jobs) {
      $.each(jobs, function(i, job){
        $jobs.append('<li>my job</li>')
      });
    }
  });

});
</script>

<ul id="jobs"></ul>

【问题讨论】:

  • 你检查错误回调了吗?
  • @leafeve 错误回调是什么?抱歉,我是新手。
  • 你只有一个成功回调;你需要添加一个错误回调。
  • 添加错误回调并检查agian tutorialsteacher.com/jquery/jquery-ajax-method
  • 您是否检查过浏览器开发工具的“网络”选项卡中的响应?响应是什么样的?它是有效的 JSON 吗?

标签: javascript ajax api


【解决方案1】:

您需要在选项对象中进行错误回调:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(function (){

  var $jobs = $('#jobs');

  $.ajax({
    type: 'GET',
    dataType: 'json',
    username: '5afe0f90-3480-4d47-8206-3529815a610a',
    password: '',
    crossDomain: true,
    url: 'http://www.reed.co.uk/api/1.0/search?keywords=construction&location=sheffield',
    success: function(jobs) {
      $.each(jobs, function(i, job){
        $jobs.append('<li>my job</li>')
      });
    },
    error: (err)=> {alert(err)}
  });

});
</script>

<ul id="jobs"></ul>

除了成功,还有四种返回状态:

  • 超时 - 超过您指定的超时时间
  • 错误 - http 错误,例如 404
  • notmodified - 自上次请求以来未修改请求的资源时
  • parsererror - 当 xml/json 响应错误时

因此,您可能需要逐一检查以确定处理每个响应的最佳方式。 :)

【讨论】:

    【解决方案2】:

    一切看起来都很好,除了成功回调。您有两种选择,请查看下方以了解哪些套件更适合您的需求。

    选项 1: 使用 arrow function expression

    $(function (){
        var $jobs = $('#jobs');
    
        $.ajax({
            type: 'GET',
            dataType: 'json',
            username: '5afe0f90-3480-4d47-8206-3529815a610a',
            password: '',
            crossDomain: true,
            url: 'http://www.reed.co.uk/api/1.0/search?keywords=construction&location=sheffield',
            success: (jobs) => {
                $.each(jobs, function(i, job){
                    $jobs.append('<li>my job</li>')
                });
            }
        });
    });
    

    选项 2:$jobs 的定义移动到回调中的相同上下文中或将其删除。

    $(function (){
        $.ajax({
            type: 'GET',
            dataType: 'json',
            username: '5afe0f90-3480-4d47-8206-3529815a610a',
            password: '',
            crossDomain: true,
            url: 'http://www.reed.co.uk/api/1.0/search?keywords=construction&location=sheffield',
            success: function(jobs) {
                $.each(jobs, function(i, job){
                    $('#jobs').append('<li>my job</li>')
                });
            }
        });
    });
    

    解释: 这是由于定义变量的上下文不同造成的。对于function 定义,它将使用它自己的上下文,对于arrow function,它将使用当前上下文。

    如果您仍有问题,请检查控制台以查看服务器响应代码 CORSMixed Content 等是否产生任何错误。

    【讨论】:

    • 嗨,Noah,我已经尝试了您的两种解决方案,但页面上没有显示任何内容。我将 dataType 更改为 JSONP 以解决 CORS 问题。你试过这个脚本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多