Dynamics crm 2011 req.readyState==1,如何更改?

Dynamics crm 2011 req.readyState==1,如何更改?,dynamics-crm-2011,dynamics-crm,crm,Dynamics Crm 2011,Dynamics Crm,Crm,我试图使用SOAP请求获取任务实体的优先级代码选项集值 if(类型(SDK)=“未定义”) {SDK={uuuu名称空间:true};} SDK.SOAPSamples={ _getServerUrl:函数(){ var OrgServicePath=“/XRMServices/2011/Organization.svc/web”; var serverUrl=“”; if(GetGlobalContext的类型==“函数”){ var context=GetGlobalContext(); s

我试图使用SOAP请求获取
任务
实体的
优先级代码
选项集值

if(类型(SDK)=“未定义”)
{SDK={uuuu名称空间:true};}
SDK.SOAPSamples={
_getServerUrl:函数(){
var OrgServicePath=“/XRMServices/2011/Organization.svc/web”;
var serverUrl=“”;
if(GetGlobalContext的类型==“函数”){
var context=GetGlobalContext();
serverUrl=context.getServerUrl();
}
否则{
if(typeof Xrm.Page.context==“对象”){
serverUrl=Xrm.Page.context.getServerUrl();
}
其他的
{抛出新错误(“无法访问服务器URL”);}
}
if(serverUrl.match(/\/$/)){
serverUrl=serverUrl.substring(0,serverUrl.length-1);
}
返回serverUrl+OrgServicePath;
},
assignRequest:函数(successCallback、errorCallback){
if(successCallback!=null)
此._参数检查(successCallback,“函数”,“SDK.SOAPSamples.assignRequest方法successCallback参数必须是函数”);
此._参数检查(errorCallback,“函数”,“SDK.SOAPSamples.assignRequest方法errorCallback参数必须是函数”);
var request=“POSThttps://tamaldomain.api.crm5.dynamics.com/XRMServices/2011/Organization.svc/web";
请求+=“内容类型:text/xml;字符集=utf-8”;
请求+=“SOAPAction:http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute";
请求+=”;
请求+=”;
请求+=”;
请求+=”;
请求+=”;
请求+=”;
请求+=“元数据ID”;
请求+=“00000000-0000-0000-0000-000000000000”;
请求+=”;
请求+=”;
请求+=“RetrieveAsIfPublished”;
请求+=“假”;
请求+=”;
请求+=”;
请求+=“EntityLogicalName”;
请求+=“任务”;
请求+=”;
请求+=”;
请求+=“逻辑名称”;
请求+=“优先级代码”;
请求+=”;
请求+=”;
请求+=”;
请求+=“RetrieveAttribute”;
请求+=”;
请求+=”;
请求+=”;
请求+=”;
var req=新的XMLHttpRequest();
请求打开(“POST”,SDK.SOAPSamples.\u getServerUrl(),true)
setRequestHeader(“接受”、“应用程序/xml、文本/xml、*/*”);
请求setRequestHeader(“内容类型”,“文本/xml;字符集=utf-8”);
请求setRequestHeader(“SOAPAction”http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
req.onreadystatechange=函数(){SDK.SOAPSamples.assignResponse(req,successCallback,errorCallback);};
请求发送(请求);
},
assignResponse:函数(req、successCallback、errorCallback){
调试器;
如果(req.readyState==4){
如果(请求状态==200){
if(successCallback!=null)
{successCallback();}
}
否则{
errorCallback(SDK.SOAPSamples._getError(req.responseXML));
}
}
}
问题是
req.readyState
的值是1,这意味着“已建立服务器连接”。但我不知道这到底意味着什么

如何将
req.readyState
的值更改为4,以便从该请求中获得响应


非常感谢。

onreadystatechange事件被触发五次(0-4),每次readyState更改一次。请参阅有关此状态的更多信息。

我发现在javascript中编程有些情况很麻烦。因此,我创建了一个“通用处理程序”(.ashx),而不是单独使用javascript要对我的解决方案进行编程并使用XmlHttpRequest对象从javascript执行此处理程序。

请尝试将req移动到SDK.SOAPSamples范围,然后在响应中使用它,如下所示:

SDK.SOAPSamples = {
    req: null,
    _getServerUrl: function () { … },
    assignRequest: function (successCallback, errorCallback) { 
        //...           
        var req = SDK.SOAPSamples.req = new XMLHttpRequest(); 
        //...
    },
    assignResponse: function (successCallback, errorCallback) { //remove req param
        var req = SDK.SOAPSamples.req;

        if (req.readyState == 4) {
        if (req.status == 200) {
        if (successCallback != null) { successCallback(); }}
        else { errorCallback(SDK.SOAPSamples._getError(req.responseXML));}}
    }
}

嗨,佩德罗,正如你在代码中看到的那样,
req.readyState
的值必须是4才能执行
successCallback
函数。这段代码有什么问题吗?没有,你的代码看起来不错,但你从来没有完成过?无论是在errorcallback中还是在errorcallback中?尝试启用跟踪,看看是否有错误。当请求完成时,readyState的值将是4,所以你可以强迫任何事情。