2

我正在从托管在同一 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 中完美运行。

4

2 回答 2

4

好的,我想我找到了问题

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

jQuery find() 有问题,因为在不同的浏览器中 selectSingleNode 的实现不同。

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

编辑

我发现使选择器看起来像这样似乎可行

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

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

于 2013-04-03T22:11:53.053 回答
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,所以这显然不是问题。

于 2013-04-03T15:03:16.597 回答