我有一个简单的程序,它在抓取某些项目的网站。我正在使用Angular $ http服务来调用下面的C#方法以从页面获取标记,然后使用JS处理其他所有内容。除了一个小麻烦:一系列404错误,其他一切工作都很好。
http get调用完成后,开发人员工具中将显示404错误。这几乎就像javascript试图解释HTML,然后在浏览器中对图像的所有获取请求上均失败:
我要弄清楚的是如何使404错误消失或无声地失败(不在控制台中显示)。我没有在研究中找到任何东西,但假设有某种方法可以处理此问题,无论是在服务器端还是客户端
C#
public static string GetPageSource()
{
JObject result = new JObject();
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://awebpage.html");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
result["data"] = reader.ReadToEnd();
result["success"] = true;
reader.Close();
response.Close();
}
catch (Exception ex)
{
result["data"] = ex.Message;
result["success"] = false;
}
return JsonConvert.SerializeObject(result);
}
JS
$scope.getPageSource = function () {
var ajaxProcessor = Utils.ajaxMessage('Scraping Beer Menu From Source');
ajaxProcessor.start();
$http({
method: 'POST',
url: 'AJAX/MenuHandler.aspx/GetPageSource',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: {}
}).then(function (response) {
ajaxProcessor.stop();
var result = $.parseJSON(response.data.d);
if (result.success === false) {
Utils.showMessage('error', result.data);
} else {
var beerMenu = new BeerMenu(result.data, $scope.loggedInUser, function (beerMenu) {
$scope.buildDisplayMenu(beerMenu);
});
}
}, function (err) {
ajaxProcessor.stop();
console.log(err);
Utils.showMessage('error', err.data.Message);
});
};
更新
感谢@dandavis,我的问题仅限于在buildDisplayMenu函数(调用buildCurrentMenu)中调用$ .parseHTML。是否有使其忽略图像或任何获取请求的方法?
buildCurrentMenu: function () {
var html = $.parseHTML(this.pageSource);
var menuDiv = $(html).find('.TabbedPanelsContent')[0];
var categories = $(menuDiv).find('h2');
var categegoryItems = [];
var beerArray = [];
for (var i = 0; i < categories.length; i++) {
...
}
return beerArray;
}
解决方案是在调用之前从页面源中删除所有img标签(或任何其他应忽略的标签) $.parseHTML
this.pageSource = this.pageSource.replace(/<img[^>]*>/g, "");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句