1

我有一个页面使用 Jquery $.ajax 来获取另一个页面的 html 代码。这是它的样子:

    <html><head>
    <script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script language="JavaScript" type="text/javascript">
    <!--
$(function(){
        $.ajax({
            url:another_page_url,
            async:false,
            dataType:"text",
            success:function(doc){ 
                //do something with $(doc) 
                //e.g. alert($(doc).find('img').attr('src'));}
        });
});
    //-->
    </script>
    </head>
    <body>
        <pre id="result" style="word-wrap: break-word; white-space: pre-wrap;"></pre>
    </body></html>

another_page_url 是一个网页,里面有很多这样的图片:

<img src="http://ww3.sinaimg.cn/mw600/50cdeb22jw1e2a35t0w8ag.gif">

问题是当我在成功加载后调用 $(doc)(等于 $.parseHTML(doc))时,Jquery 启动 ajax get 请求以加载 doc 中包含的所有图像。我的问题是如何防止这种自动加载的事情?我只想要图像 url 字符串而不是这些真实图像。

PS 如果我设置 dataType="xml" 会有一个 prase 错误。(似乎我要加载的页面不是 xml 兼容的,我无法更改它。)设置 dataType="html" 等于调用 $( doc)这导致我遇到同样的情况。

谢谢你的帮助。

4

2 回答 2

4

谢谢大家。我的问题是这样解决的:

$.ajax({
    url:url,
    async:false,
    dataType:"text",
    success:function(doc){ 
        var new_doc = doc.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function (match, capture) {return "<img no_load_src=\"" +capture+ "\" />";});
        parse_function(new_doc);
    },
    error:function(jqXHR, textStatus, errorThrown){ alert(textStatus); }
});

只需两步即可解决此问题:

  • 在 $.ajax 调用中显式设置 dataType="text" 以便 jquery 不会检测和解析返回的 html 文档。
  • 在使用之前使用正则表达式替换所有img标签的src属性。(我将<img属性src="somewhere" />更改为<img no_load_src="somewhere" />以防止jquery加载真实图像。)
于 2013-03-05T06:37:57.847 回答
1

每当您请求从中加载 html 数据时,它也将始终被视为 html。因此,如果您希望将 html 作为字符串,则需要将 <替换为<>替换为>

请参考以下内容:

success:function(doc){ 

    // create dynamic temporary div
    var div = $("<div />" , { id : 'temp-container' });

    // appned reposne html into div 
    $(div).html(doc);


    var img_url = $(div).find('img').attr('src'); 

            // check firebug console
    console.log(img_url);   


}

你可以找到任何属性。无需顶部将其附加到正文中。
希望它对你有用。祝你好运

于 2013-03-01T04:42:37.767 回答