You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中GET请求Ajax传参问题:QUnit测试URL调用失败求助

问题:QUnit测试中GET请求的Ajax调用未成功触发

我正在用QUnit编写JavaScript单元测试,尝试通过GET方法发起Ajax调用某个URL,但这个URL始终没被成功调用。以下是我的测试代码:

QUnit.test( "Importing Grid", function(assert) { 
  var done = assert.async(); 
  var data = { 
    "info": {"view":"LATEST","mode": 1,"memberId": 1001,"baselineId": -1} 
  } 
  console.log(cuboid_id+" : "+cuboid_name); 
  $.ajax({ 
    url: Globals.baseURL + "rest/grid/"+cuboid_id, 
    type: "GET", 
    dataType: "application/json", 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    success: function(result){ 
      console.log(JSON.stringify(result)); 
      assert.equal(result !=null,true,"Response should not be null"); 
      assert.equal(result[0].error,"Whitebaord ID NOT FOUND","InValid Whiteboard ID"); 
      done(); 
    } 
  }); 
});

我试过一些相关方案但没效果,希望有人能指出Ajax调用需要修改的地方,提前感谢!


解决方案

嘿,我看了你的代码,发现几个可能导致GET请求没成功触发的问题,咱们一个个梳理:

  • GET请求不要用JSON.stringify(data)传参:GET请求的参数通常是附加在URL的查询字符串里,而非请求体中。jQuery的$.ajax处理GET请求时,如果你给data传普通对象,它会自动把对象转换成key=value格式的查询字符串拼到URL后。但你现在把data转成了JSON字符串,会导致参数格式错误,后端无法解析,甚至请求本身不符合规范。

  • 移除contentType: "application/json"设置:这个参数是用来告诉服务器请求体的格式,但GET请求一般不会发送请求体,这个设置在这里完全没必要,甚至可能让服务器误解请求格式,导致请求被拒绝。

  • 检查cuboid_id和cuboid_name的作用域:你的代码直接使用了这两个变量,如果它们不在当前测试函数的作用域内,console.log会抛出错误,后续的Ajax代码就不会执行了。先确认这两个变量是否正确定义并能正常访问。

  • 添加error回调排查问题:目前你的代码只有success回调,一旦请求失败(比如404、500或参数错误),你根本不知道问题出在哪。加上error回调可以打印错误信息,方便快速定位问题。

修改后的代码示例:

QUnit.test( "Importing Grid", function(assert) { 
  var done = assert.async(); 
  // 先确认cuboid_id能正常访问
  if (typeof cuboid_id === 'undefined') {
    assert.fail('cuboid_id is not defined');
    done();
    return;
  }
  var data = { 
    "info": {"view":"LATEST","mode": 1,"memberId": 1001,"baselineId": -1} 
  } 
  console.log(cuboid_id+" : "+cuboid_name); 
  $.ajax({ 
    url: Globals.baseURL + "rest/grid/"+cuboid_id, 
    type: "GET", 
    dataType: "application/json", 
    data: data, // 直接传对象,无需转JSON字符串
    success: function(result){ 
      console.log(JSON.stringify(result)); 
      assert.ok(result !== null, "Response should not be null"); // 用ok断言更简洁
      assert.equal(result[0].error, "Whiteboard ID NOT FOUND", "Invalid Whiteboard ID"); // 修正拼写错误:Whitebaord -> Whiteboard
      done(); 
    },
    error: function(xhr, status, error) {
      console.error('Ajax请求失败:', status, error);
      console.error('响应内容:', xhr.responseText);
      assert.fail('Ajax请求失败: ' + error);
      done();
    }
  }); 
});

另外注意你断言里的拼写错误:Whitebaord应该是Whiteboard,这个也可能导致断言不通过,顺便帮你修正了。

内容的提问来源于stack exchange,提问作者Jaydeep Bobade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:37:56