我正在使用一个jQuery
名为的库MockAjax
,它允许您模拟/测试真正的 AJAX 调用。
在我的应用程序中,我可以使用 AJAX 请求的实时应用程序版本,MockAjax
并将拦截 AJAX 请求并以 Mock 响应进行响应!
我还在使用另一个M<ockJson
类似的库,但它允许您生成模拟 JSON 响应。
一起使用这两个库,我的应用程序发出 AJAX 请求。 MockAjax
捕获 AJAX 请求,然后MockJson
生成并返回随机JSON
响应。
在我过去的项目中,这一直很好,直到今天都没有问题......
现在我的应用程序运行良好,我决定是时候将 JavaScript 重组为更结构化的版本了。(将 DOM 事件、任务等放入代码段)。
这就是我的问题开始的地方......
在我的新代码中,
- 我的应用程序发出 AJAX 请求。
MockAjax
捕获AJAX
请求。MockJson
被调用以获得JSON
响应- 错误这就是一切都出错的地方......
在这最后一步,它应该将JSON
响应传递回原来的AJAX
调用Success
函数。它根本没有!
我在控制台中没有任何错误或任何内容。alert()
我在我的 AJAX 调用函数中设置了一个简单的success()
函数,它甚至无法触发警报!
我不确定是否存在某种范围问题或问题可能是什么。当我的应用程序是扁平的时,glbal 根级别中的所有变量和函数都没有应用程序的结构......一切都有效。一旦我将所有内容都移到对象等中......除了没有将 MockAjax 响应返回到 Real Ajax 响应的 1 个问题之外,它一切正常!
我删除了 95% 的应用程序代码并重新构建了它,只需要运行这个示例问题。问题的演示在这里... http://jsbin.com/vugeki/1/edit?js
应用流程:
projectTaskModal.init();
在页面加载时运行This fires off projectTaskModal.mockAjax.init();
设置MockAjax
和MockJson
代码- 然后
projectTaskModal.task.openTaskModal(projectTaskModal.cache.taskId);
运行执行AJAX
请求 AJAX POST Request
被发送到/gettaskevents
MockAjax
捕获发送到的请求/gettaskevents
MockAjax
然后调用MockJson
生成JSON
响应。projectTaskModal.mockAjax.generateTaskEventsJson();
调用该函数,我让它将 JSON 响应打印到控制台中,这样我就可以看到它正在生成它!- 在我的
MockAjax
代码中,var taskevents
保存JSON
响应,然后将其设置为此...this.responseText = taskevents;
``this.responseTextI believe is what is supposed to be returned to the Applications original
AJAX` 调用。看来这就是问题所在!它似乎没有将响应返回到最初请求它的原始 AJAX 代码!
这可能是某种范围问题吗?
var projectTaskModal = {
cache: {
taskId: 1,
projectId: '12345',
},
init: function() {
projectTaskModal.mockAjax.init();
//console.log(projectTaskModal.mockAjax.init.generateTaskEventsJson());
projectTaskModal.task.openTaskModal(projectTaskModal.cache.taskId);
},
task: {
openTaskModal: function(taskId) {
// Load Task Events/Comments Panel from AJAX Request
projectTaskModal.task.loadTaskEventsPanel(taskId);
},
/**
* Load Task Events/Comments from backend Database JSON
* @param {string} jsonServerEndpoint URL for AJAX to Request
* @return {string} Generated HTML of all Task Events built from JSON
*/
loadTaskEventsPanel: function(taskId) {
// Request Task Events and Comments using AJAX Request to Server
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/gettaskevents',
data: {
action: 'load-task-events',
task_id: projectTaskModal.cache.taskId
},
success: function(data) {
alert('TESTING AJAX SUCCESS CALLBACK WAS CALLED!');
console.log('function loadTaskEventsPanel(taskId) DATA: ');
console.log(data);
// Parse JSON data
var taskEventsJson = data;
var task_events = taskEventsJson.task_events;
// Loop over each Task Event record returned
$.each(task_events, function(i, event) {
console.log('commentID: ' + event.commentId);
console.log('create_at DateTime: ' + event.created_at);
});
}
});
},
},
mockAjax: {
init: function(){
// Adding the @EVENT_TYPE keyword for MockJSON Template Usage
$.mockJSON.data.EVENT_TYPE = [
'Comment Created',
'Task Status Changed',
'Task Completed'
];
// Mock AJAX response for AJAX request to /gettaskevents
$.mockjax({
url: '/gettaskevents',
contentType: 'text/json',
responseTime: 2900, // Simulate a network latency of 750ms
response: function(settings) {
console.log('mockJax POST to /gettaskevents :');
//console.log(settings);
//DEBUG('Get Task Events JSON', settings.data);
if(settings.data.value == 'err') {
alert('MockAjax Error');
this.status = 500;
this.responseText = 'Validation error!';
} else {
alert('MockAjax Success');
//var taskevents = generateTaskEventsJson();
var taskevents = projectTaskModal.mockAjax.generateTaskEventsJson();
this.responseText = taskevents;
console.log(taskevents);
}
}
});
},
// Generate Mock JSON Response to load fake Task Evewnt/Comments JSON for Mock AJAX request
//var generateTaskEventsJson = function () {
generateTaskEventsJson: function() {
var mockTaskJson = $.mockJSON.generateFromTemplate({
"task_events|10-14" : [{
"commentId|+1" : 100000000,
"projectId|+1" : 100000000,
"taskId|+1" : 100000000,
"userId|+1" : 100000000,
"created_at" : "@DATE_YYYY-@DATE_MM-@DATE_DD",
"event_type" : "@EVENT_TYPE",
"userName" : "@MALE_FIRST_NAME @LAST_NAME",
"description" : "@LOREM_IPSUM @LOREM_IPSUM"
}]
});
//DEBUG('Generate Mock Task Events JSON', mockTaskJson.task_events);
//console.log(mockTaskJson.task_events);
//return mockTaskJson.task_events;
return mockTaskJson;
}
},
};
$(function() {
projectTaskModal.init();
});