jQuery ajax $(xml).find()适用于IE但不适用于Chrome

时间:2013-04-02 23:52:47

标签: jquery xml ajax post dynamics-crm-2011

我正在从托管在同一个CRM实例上的网络资源上向CRM发出FetchXML请求

此代码适用于IE,但不适用于Chrome ...为什么?

    $.ajax({
        type: "POST",
        dataType: 'xml',
        contentType: "text/xml; charset=utf-8",
        processData: false,
        url: path,
        data: fetchRequest,
        beforeSend: function(xhr) {
            xhr.setRequestHeader(
                "SOAPAction",
                "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"
            ); //without the SOAPAction header, CRM will return a 500 error
        }
    }).done(
         function(data){
           $(data).find("a\\:Entity").each(function () {
            // loop entered in IE but not in chrome
           }
         }
     );

修改

问题不在于ajax调用,问题在于.find()没有从返回的xml中获取节点。

所以要明确我从每个浏览器的请求中得到的内容看起来都是相同的xml但是这里的find方法

$(data).find('a\\Entity') 

在chrome中没有返回任何项目......它在IE中完美运行。

2 个答案:

答案 0 :(得分:3)

好的,我想我找到了问题

http://bugs.jquery.com/ticket/155

由于不同浏览器中selectSingleNode的不同实现,jQuery find()存在问题。

这个错误说它已修复,但我认为不是。

修改

我发现让选择器看起来像这样似乎可以工作

$(xml).find("a\\:Entity, Entity")

这有点像黑客,但它解决了我的特殊问题

答案 1 :(得分:2)

您很可能需要连接到.fail以查看它是否返回错误。您应该能够将它附加到.done函数的末尾,例如

$.ajax({
    type: "POST",
    dataType: 'xml',
    contentType: "text/xml; charset=utf-8",
    processData: false,
    url: path,
    data: fetchRequest,
    beforeSend: function(xhr) {
        xhr.setRequestHeader(
            "SOAPAction",
            "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"
        ); //without the SOAPAction header, CRM will return a 500 error
    }
}).done(
     function(data){
       $(data).find("a\\:Entity").each(function () {
        // loop entered in IE but not in chrome
       }
     }
 ).fail(function(p1, p2, p3){
    ...
}); 

注意 - 如果失败的工作方式与旧的“错误”功能相同,则应该有多个参数可以允许失败功能接受,第二个和第三个为您提供有关错误的更多详细信息。

除了捕获失败之外,我还记得chrome和异步模式的问题,因此您也可以尝试在dataType标志之后将async标志设置为false。像这样:

$.ajax({
    type: "POST",
    dataType: 'xml',
    async: false,
    .... etc

我读过关于chrome的唯一其他问题是jsonp的问题,但是你在这里使用xml,这显然不是问题。