使用jQuery在AJAX中出现未知错误

时间:2014-03-04 09:03:15

标签: javascript jquery ajax

我已经尝试过最后几个小时让这段代码工作了,它应该加载带有类内容的div并通过ajax替换当前页面.content。这是一个动态网站,所以我需要它在所有非出站链接上工作。

$("a:not([href^='http://']), a[href^='http://www.example.com'], a[href^='http://example.com']").click(function (event) {
    event.preventDefault();
    var addressValue = $(this).attr("href");
    page = addressValue.replace(/https?:\/\/[^\/]+/i, "");
    pagecontent = page+" .content";
    $( ".content" ).load( pagecontent );
    $.ajax({
        url: page,
        async: true,
        success: function(data) {
            var matches = data.match(/<title>(.*?)<\/title>/);
        var spUrlTitle = matches[1];
                document.title = spUrlTitle;
        },
    });
});

我已经系统地将错误缩小到以下代码片段。 (一切事先没有它工作)

        pagecontent = page+" .content";
        $( ".content" ).load( pagecontent );
        $.ajax({
            url: page,
            async: true,
            success: function(data) {
                var matches = data.match(/<title>(.*?)<\/title>/);
            var spUrlTitle = matches[1];
                    document.title = spUrlTitle;
            },
        });

通过进一步分析,我确定单击没有http://

的链接时会导致错误
page = addressValue.replace(/https?:\/\/[^\/]+/i, "");

上面的代码行无法运行,因为没有http://

我不确定如何解决这个问题,但至少我把它缩小了。

2 个答案:

答案 0 :(得分:0)

如果您打算使用此功能访问域外的网页,则会被阻止跨源请求的网站阻止..相反,您可以使用

$.get(page, {/*params*/}, function(data) {
/*Success Callback*/
});

答案 1 :(得分:0)

这似乎有效:

page = addressValue.replace(/(https?:\/\/)?[^\/]+/i, "");

它基本上表示如果它位于前面,则删除http://https://,但如果没有匹配则继续解析。

或者,您可以简单地使用已在规范中定义的DOM锚点对象的属性:

var link_Element =  $( this ).get( 0 );
page = link_Element.pathname + link_Element.search;

上面将使用URL查询字符串连接主机名(以及任何其他主机级信息,如端口号等)之后的URL路径,这是本地ajax请求所需的唯一位,因此那个:

 <a href="http://example.org/path/to/content">Full URL</a>
 <a href="/path/to/content">Local URL</a>
 <a href="/path/to/content?stuff=junk">Local URL with query string</a>

会回来:

 /path/to/content
 /path/to/content
 /path/to/content?stuff=junk

无需进行任何字符串解析/清理。