Mockjax 可以处理 Json 文件中的单个 ID Api
Can Mockjax handle single IDs Api from Json file
我第一次使用 Mockjax 来模拟一个 Restful API,它将 return 给定一个 id 的一系列数据。现在我有一个包含多个项目的 json 文件,我想在 Mockjax 中(或在必要时)有一个函数来 return 仅查询 ID。我怎样才能做到这一点?
当前代码:
$.mockjax({
url: "/Api/Cases/{caseId}",
proxy: "/mocks/cases nuevo.json",
dataType: 'json',
responseTime: [500, 800]
});
$.ajax({
type: 'GET',
url: '/Api/Cases/',
data: {caseId: taskId},
success: function(data){
//use the returned
console.log(data);
}
});
当前错误:
GET http://localhost:8080/Api/Cases/?caseId=100 404 (Not Found)
问得好...是的,你可以做到。但是您必须使用 response
callback function 自己编写功能,然后对文件发出 "real" Ajax 请求(而不是使用 proxy
选项)。下面我只是进行了另一个 $.ajax()
调用,因为我没有为 that 端点设置模拟处理程序,Mockjax 让它通过。
请注意,URL 参数的设置与您建议的略有不同,模拟设置如下所示:
$.mockjax({
url: /\/Api\/Cases\/(\d+)/, // notice the regex here to allow for any ID
urlParams: ['caseID'], // This defines the first matching group as "caseID"
responseTime: [500, 800],
response: function(settings, mockDone) {
// hold onto the mock response object
var respObj = this;
// get the mock data file
$.ajax({
url: 'mocks/test-data.json',
success: function(data) {
respObj.status = 200;
// We can now use "caseID" off of the mock settings.urlParams object
respObj.responseText = data[settings.urlParams.caseID];
mockDone();
},
error: function() {
respObj.status = 500;
respObj.responseText = 'Error retrieving mock data';
mockDone();
}
});
}
});
您的代码还有一个问题,但是,您的 Ajax 调用确实 没有 将 ID 添加到 URL,而是将它添加到请求参数。如果您想使用那个 API 端点,您还需要更改源代码 $.ajax()
调用。这是新的 Ajax 调用:
$.ajax({
type: 'GET',
url: '/Api/Cases/' + taskId, // this will add the ID to the URL
// data: {caseId: taskId}, // this adds the data to the query string
success: function(data){
//use the returned
console.log(data);
}
});
请注意,这假设模拟数据类似于:
{
"13": { "name": "Jordan", "level": 21, "id": 13 },
"27": { "name": "Random Guy", "level": 20, "id": 27 }
}
我最终做的是:我没有触及 $.mockjax
函数,并且我使用 jquery 的 $.grep
函数如下:
$.ajax({
type: 'GET',
url: '/Api/Cases/' + taskId,
success: function(data){
//note you have to parse the data as it is received as string
data = JSON.parse(data);
var result = $.grep(data, function(e){ return e.caseId == taskId; });
//since i'm expecting only one result, i pull out the result on the 0 index position
requestedData = result[0];
}
});
$.grep()
方法根据需要从数组中删除项目,以便所有剩余项目都通过提供的测试 see Jquery API,并且由于我们的测试是元素的 caseId 属性等于 taksId发送的变量,它将 return 所有匹配给定 Id 的元素,在这种情况下,只有一个,这就是为什么我只在 0 索引位置取结果 requestedData = result[0];
**注:**
更合适的解决方案是混合我所做的和@jakerella 的回答,因为他们的方法在 mockjacx 函数中实现了 find element 方法,而我的函数假定通常的 JSON 响应:
[{"caseId": 30,"name": "Michael"},{"caseId": 31,"name": "Sara"}]
我第一次使用 Mockjax 来模拟一个 Restful API,它将 return 给定一个 id 的一系列数据。现在我有一个包含多个项目的 json 文件,我想在 Mockjax 中(或在必要时)有一个函数来 return 仅查询 ID。我怎样才能做到这一点?
当前代码:
$.mockjax({
url: "/Api/Cases/{caseId}",
proxy: "/mocks/cases nuevo.json",
dataType: 'json',
responseTime: [500, 800]
});
$.ajax({
type: 'GET',
url: '/Api/Cases/',
data: {caseId: taskId},
success: function(data){
//use the returned
console.log(data);
}
});
当前错误:
GET http://localhost:8080/Api/Cases/?caseId=100 404 (Not Found)
问得好...是的,你可以做到。但是您必须使用 response
callback function 自己编写功能,然后对文件发出 "real" Ajax 请求(而不是使用 proxy
选项)。下面我只是进行了另一个 $.ajax()
调用,因为我没有为 that 端点设置模拟处理程序,Mockjax 让它通过。
请注意,URL 参数的设置与您建议的略有不同,模拟设置如下所示:
$.mockjax({
url: /\/Api\/Cases\/(\d+)/, // notice the regex here to allow for any ID
urlParams: ['caseID'], // This defines the first matching group as "caseID"
responseTime: [500, 800],
response: function(settings, mockDone) {
// hold onto the mock response object
var respObj = this;
// get the mock data file
$.ajax({
url: 'mocks/test-data.json',
success: function(data) {
respObj.status = 200;
// We can now use "caseID" off of the mock settings.urlParams object
respObj.responseText = data[settings.urlParams.caseID];
mockDone();
},
error: function() {
respObj.status = 500;
respObj.responseText = 'Error retrieving mock data';
mockDone();
}
});
}
});
您的代码还有一个问题,但是,您的 Ajax 调用确实 没有 将 ID 添加到 URL,而是将它添加到请求参数。如果您想使用那个 API 端点,您还需要更改源代码 $.ajax()
调用。这是新的 Ajax 调用:
$.ajax({
type: 'GET',
url: '/Api/Cases/' + taskId, // this will add the ID to the URL
// data: {caseId: taskId}, // this adds the data to the query string
success: function(data){
//use the returned
console.log(data);
}
});
请注意,这假设模拟数据类似于:
{
"13": { "name": "Jordan", "level": 21, "id": 13 },
"27": { "name": "Random Guy", "level": 20, "id": 27 }
}
我最终做的是:我没有触及 $.mockjax
函数,并且我使用 jquery 的 $.grep
函数如下:
$.ajax({
type: 'GET',
url: '/Api/Cases/' + taskId,
success: function(data){
//note you have to parse the data as it is received as string
data = JSON.parse(data);
var result = $.grep(data, function(e){ return e.caseId == taskId; });
//since i'm expecting only one result, i pull out the result on the 0 index position
requestedData = result[0];
}
});
$.grep()
方法根据需要从数组中删除项目,以便所有剩余项目都通过提供的测试 see Jquery API,并且由于我们的测试是元素的 caseId 属性等于 taksId发送的变量,它将 return 所有匹配给定 Id 的元素,在这种情况下,只有一个,这就是为什么我只在 0 索引位置取结果 requestedData = result[0];
**注:** 更合适的解决方案是混合我所做的和@jakerella 的回答,因为他们的方法在 mockjacx 函数中实现了 find element 方法,而我的函数假定通常的 JSON 响应:
[{"caseId": 30,"name": "Michael"},{"caseId": 31,"name": "Sara"}]