jQuery.load()在Firefox下响应错误,在Chrome下运行正常

时间:2011-03-21 09:31:38

标签: jquery firefox

我有一个在对话框而不是主窗口中打开页面的功能。清理后的代码如下:

var baseurl = window.location.origin  + '/static/docs/'
function onClickLink(event) {
    event.preventDefault();
    if($("#dialog").length==0) {
        setUpDialog()
    }
    var href = event.target.href;
    href = baseurl + href.substring(1+href.lastIndexOf('/'));
    $("#dialog").load(href + ' .body', function(response, status, xhr) {
      if (status == "error") {
        window.location = event.target.href;      
      } else {
        changeImageSrc();
        reStructure();
      }
    });
    $("#dialog").dialog({
    modal:true, 
    title:event.target.text,
    width: 960,
    position: ['center', 100]
    });    
}

此代码在Chrome中运行良好,但(状态==“错误”)在Firefox下执行。看起来Firefox有404错误,可能是加载页面的图像,或者类似的东西。

有关如何在Firefox下获取Chrome行为的任何想法吗? (你可以找到一个有效的example here

4 个答案:

答案 0 :(得分:10)

  1. 在FireFox中,window.location.origin为undefined。因此FireFox厌倦了获取页面:

    http://openerp.co.hu/hu/funkcionalis-bemutato/undefined/static/docs/sales.html

    并失败

  2. 在chrome中,window.location.origin http://openerp.co.hu。 Chrome绑定以获取页面:

    http://openerp.co.hu/static/docs/sales.html

    并成功

  3. 不要依赖window.location.origin,请尝试使用:

    window.location.protocol + "//" + window.location.host
    

答案 1 :(得分:1)

why firefox doesn't support window.location.origin(这不是标准的)

TL;博士

有时你需要这个而不是之前选择的答案:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

解释

我需要获得window.location.origin又名window.location.protocol+'//'+window.location.host的长度。简单地用后者替换前者是行不通的。

window.location.protocol+'//'+window.location.host.length将返回类似http://25的内容,这是协议,最后连接window.location.host的长度。

我通过制作变量来解决这个问题,如下所示:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

在那之后,我可以获得$window_location_origin的长度,即原始的25 {window.location.host.length)加上window.location.protocol+'//'的7,给我所需的32。

答案 2 :(得分:0)

特别是错误消息?另外,使用以下代码更新您的代码:

var baseurl = window.location.origin  + '/static/docs/';

function onClickLink(event) {
    event.preventDefault();

    if($("#dialog").length==0) {
        setUpDialog();
    }

    var href = event.target.href;

    href = baseurl + href.substring(1+href.lastIndexOf('/'));

    $("#dialog").load(href + ' .body', function(response, status, xhr) {
      if (status == "error") {
        window.location = event.target.href;
      } else {
        changeImageSrc();
        reStructure();
      }
    });

    $("#dialog").dialog({
        modal:true, 
        title:event.target.text,
        width: 960,
        position: ['center', 100]
    });
}

答案 3 :(得分:0)

404表示“找不到页面”。

设置断点并检查导致问题的URL。这真的有效吗?

当涉及到URL中的非法字符时,Chrome可能比Firefox或类似的东西更宽松。尝试将网址粘贴到两个浏览器的位置栏中,以查看您获得的内容。