safari和chrome中的jquery $ .ajax()不起作用

时间:2010-11-20 06:37:49

标签: ajax google-chrome jquery safari

我想用$ .ajax从xml文件中读取一些信息,这是我的js代码:

        $.ajax({
            type: "get",
            url: "Database/App_all.xml",
            dataType: "xml",
            timeout: 2000,
            beforeSend: function () {

            },
            success: function (xml) {
                $(xml).find("app[id='id-1']").appendTo($("#contain"));
            },
            error: function () {
                alert("ajax failed!");
            }
        });

但是,代码只适用于firefox和opera。

它在chrome(7.0.517.24)和safari(5.0.1)中不起作用,在没有任何警报的情况下失败,甚至没有警报(“ajax失败”)。

Chrome和Safari中的$ .ajax是否有任何错误?请问如何解决问题?

非常感谢你:)

5 个答案:

答案 0 :(得分:4)

您应该使用chrome或safari的内置开发人员工具(ctrl + shift + i)来跟踪JS错误并跟踪实际的AJAX请求。

您的代码是否包含在document.ready中?在javascript控制台中有任何错误吗?也尝试在成功回调线之后输出一些东西。

另一个原因可能是服务器返回的XML文件的mime-type不正确。它应该是[Content-type:text / xml]。您可以在chrome或safari的内置开发人员工具中检查它 - 只需在选择xml资源时查找标题选项卡。如果是实际问题,您可能需要调整Web服务器配置(主配置或.htaccess for apache)以返回正确的mime类型。

答案 1 :(得分:1)

首先,谢谢你 gajendra.bang MārisKiseļovs给我你的建议,我知道我的代码出了什么问题,在我得到一个糟糕的故事后,我试图知道$ .ajax从xml中得到了什么,所以我使用firebug检查div#contains我发现:

 <div id="contain">
        <auther>cocept</auther>
 </div>

是的,我认为<auther></auther>必须解决问题,我甚至不知道$ .ajax会获得标记名 所以我重写了它:

  success: function (xml) {
        $("#contain").html($(xml).find("app[id='id-1']").find("auther").text());
}

然后div $ contains包含:

 <div id="contain">
        cocept
 </div>

所以,chrome和safari可以再次显示!

答案 2 :(得分:0)

我认为您在阅读每个ajax的本地文件时遇到问题。 Ajax可用于从同一Web服务器读取文件,但如果您不是根据HTTP读取它,则存在一些安全限制。

在firefox和opera中,你可以按照ajax读取本地文件(使用url,如file:/// C:/Program%20Files/My/Database/App_all.xml),没有任何问题。

在Internet Explorer中,您应该使用dataType: 'text',然后将文本转换为XML(阅读更多here)。

为了能够在Chrome中读取本地文件,您必须使用其他参数重新启动chrome:

chrome.exe --allow-file-access-from-files

(确保在启动Chrome.exe之前关闭所有其他chorme实例)。

答案 3 :(得分:0)

这是本地文件的问题...您应该尝试在网络服务器上传它们并从那里检查

答案 4 :(得分:-1)

 $(xml).find("app[id='id-1']").appendTo($("#contain"));

什么是xml基本上返回,带有“#”的元素,如“#mydiv”或类似“.mydiv”

我认为您正在尝试访问某个元素,如果您没有使用“#”返回它,请尝试

 $("#"+xml).find("app[id='id-1']").appendTo($("#contain"));