最近我一直在研究噩梦模块,我觉得它非常简单实用,但我有疑问。
单击ajax按钮时如何使用回调
mycode的
var Nightmare = require('nightmare'),
nightmare = Nightmare();
nightmare
.goto('https://motul.lubricantadvisor.com/Default.aspx?data=1&lang=ENG&lang=eng')
.click('input[title="Cars"]')
.wait(1000)
.evaluate(function () {
//return $('#ctl00_ContentPlaceHolder1_lstModel option');
var links = document.querySelectorAll('#ctl00_ContentPlaceHolder1_lstMake option');
return [].map.call(links, function (e) {
return {value: e.value, name: e.text};
});
})
.end()
.then(function (items) {
console.log(items);
});
有等待方法。大多数人使用等待我搜索谷歌搜索
.wait(1000)
我没有使用等待方法。因为如果它的网络断开或慢。这不是好代码
你能帮我回调一下吗?
感谢。所以我已经激活了代码,但它没有工作
var Nightmare = require('nightmare'),
nightmare = Nightmare();
nightmare
.goto('https://motul.lubricantadvisor.com/Default.aspx?data=1&lang=ENG&lang=eng')
.click('input[title="Cars"]')
.wait('#result > #ctl00_ContentPlaceHolder1_lstMake option')
.evaluate(function () {
$(document).ajaxSuccess(function () {
var links = document.querySelectorAll('#ctl00_ContentPlaceHolder1_lstMake option');
return [].map.call(links, function (e) {
return {value: e.value, name: e.text};
});
});
})
.end()
.then(function (items) {
console.log(items);
});
答案 0 :(得分:0)
有很多方法可以解决这个问题。最简单的是以下内容。
假设Ajax请求完成时,它总是会改变页面上的内容。在等待CSS选择器可以匹配的特定元素时,可以很容易地检测到大多数这些更改。
我们假设您单击某个内容,结果将写入"#result"
匹配的元素中。如果在点击之前没有这样的元素,那么你可以等到这个元素的存在:
.click("button")
.wait("#result")
// TODO: do something with the result
您还可以使用CSS选择器来计算内容。例如,我们假设有十个元素可以与"#result > a"
匹配。如果点击再添加10个,那么您可以使用以下方式等待第20个:
.click("button")
.wait("#result > a:nth-of-type(20)")
// TODO: do something with the result
CSS选择器的世界非常大。
当然,您可以使用evaluate
添加一般的Ajax事件处理程序,如$(document).ajaxSuccess(fn)
,以便在某些回调完成时收到通知,但页面的源代码会一直更改。如果您要查找可以在DOM中看到的结果,那么维护代码会更容易。
答案 1 :(得分:-1)
使用这个,ajax回调..
$.ajax(url,{dataType: "json", type: "POST" })
.then(function successCallback( data ) { //successCallback
console.log(data);
}, function errorCallback(err) { //errorCallback
console.log(err);
});
// console.log(2);
});