答案摘要
如果有一个错误并且没有人知道它在哪里,您将不得不调试您的代码以查找可能是错误启动器的语句。如今,我们有一些很好的工具可以帮助我们完成这项任务。
假设
如果 JavaScript 用于设置或更改图像位置,则有时会发生 anundefined
进入 URI 的情况。
将是一些 javascript 发出 http 请求,并且由于错误,它不是请求绝对 url,而是请求“未定义”。
结论:这个问题,我相信是由 JS 引起的。
在 Firefox 和 Chrome 上调试
安装和运行
调试
在 Firefox 中,打开 Firebug 并激活 Net 面板,导航到一个有漏洞的页面。在 Net 面板中会有几个选项:“Clear”、“Persist”、“All”、“Html”等。确保选择ALL选项。不要在页面上做任何事情,尽量不要将鼠标悬停在上面的任何内容上。查看 GET 和 POST 请求。对无效 URL 的请求可能会显示为红色,并且状态为 404 Not Found 等。如果“全部”选项卡中没有出现任何内容,请确保您在进入页面之前打开了 Firebug。要进行故障排除,请刷新页面并重做该部分。
在 Chrome 中,使用 CDT(Chrome 开发者工具的缩写)导航到一个错误页面,打开并选择网络面板。作为 Firebug,请确保选择ALL选项,它将位于图标之后的左下角。不要在页面上做任何事情,尽量不要将鼠标悬停在上面的任何内容上。对无效 URL 的请求可能会显示为红色,并且状态为 404 Not Found 等。如果“网络”选项卡中没有出现任何内容,请确保您在进入页面之前打开了 CDT。要进行故障排除,请刷新页面并重做该部分。
还是看不到
- 对于两者,开始触发一些 Javascript 事件,例如悬停、单击 e 等,并注意面板。它将跟踪您的所有请求,好的和坏的。专注于糟糕的请求,如果没有出现糟糕的请求,这将需要创造力。这些事件将触发请求,您将能够看到它们。看到它们,您将能够知道或发现问题以及可能导致该问题的原因。更多资源CDT 网络和Firebug 网络。
PS.:如果面板变脏,请单击清除按钮或图标以清除面板中的请求
如果您提交页面并看到失败的请求很快就消失了,但由于下一页加载而丢失它,请通过单击 Firebug 上的“Persist”或 Net 面板左上角的“Preserve log”图标或在网络面板的左下角。一旦它发生了,它应该考虑你做了什么来实现它。看看你能不能让它再次发生。在弄清楚是什么用户交互导致它发生后,深入研究该代码并开始寻找发出无效请求的东西,并且永远不要忘记查看请求标头。您可以使用“脚本”选项卡在 JavaScript 中设置断点并单步执行它们。调查通过 $(element).bind/click/focus/etc 或从老派事件属性(如 onclick=""/onfocus="" 等)完成的事件处理程序。
如果您无法触发错误请求,那么导致它的任何原因都不会被您的测试触发。尝试使用更多的东西。关键是您应该能够以某种方式使请求发生。你只是还不知道。它必须显示在网络面板中。唯一不会发生的情况是当你没有做任何触发它的事情时。
我们在您的代码中寻找什么
var url = workingUrl + someObject['someProperty'];
var url = workingUrl + someObject.someProperty;
var url = workingUrl + $.md5("message"); //For the /cache/ problem. JQuery Plugin
var url = workingUrl + hex_md5("message"); //For the /cache/ problem. MD5 Implementation
<a href= "javascript:;" class="small_img" >
//Code here
</a>
window.open('/image.?url_image=' + currentImage,winName,features);
PS.: someObject 可能是 object {}
、 array[]
或任何内部浏览器类型。关键是将访问一个不存在的属性。
结论:这里没有免费的午餐可以知道到底发生了什么。但是使用调试的方法,您应该能够发现、接近或理解问题。