Ajax回调函数随机运行。我做错了什么?

时间:2022-09-20 18:53:37

I have following ajax function that behaves randomly. Sometimes alert success finally is displayed. On other occasions, second alert that is Failure: my status is 500 is displayed.

我有跟随ajax函数,行为随机。有时最终会显示警报成功。在其他情况下,显示失败的第二个警报:我的状态为500。

promptId is passed on from the calling function. I have checked the prompturl and promptId. A valid value of promptId is displayed on both occasions (success and failure). Also the audio file that I am trying to play is played in both cases (success and failure). I can not figure out the cause for this random behavior of alerts being displayed.

promptId从调用函数传递。我检查了prompturl和promptId。两种情况下都会显示有效的promptId值(成功和失败)。我试图播放的音频文件也会在两种情况下播放(成功和失败)。我无法弄清楚显示警报的随机行为的原因。

If 500 error is coming then it means , resource is not found, but my app is able to access the resource(that is playing the audio file).

如果500错误即将到来,则意味着找不到资源,但我的应用程序能够访问资源(即播放音频文件)。

function ajax_playPrompt(promptId) {
alert(promptId)


 var playPromptUrl = soapUrl + "?action=playPrompt&promptId=" + escape(promptId) +     "&parentSessionId=" + parentSessionId;
alert(playPromptUrl);
playPrompt_http_request = getNewHttpRequest('text/plain');
playPrompt_http_request.onreadystatechange = callback_ajax_playPrompt;  
playPrompt_http_request.open("GET", playPromptUrl, true);   
playPrompt_http_request.send(null);
 }

function callback_ajax_playPrompt() {
    if (playPrompt_http_request.readyState != 4) {
        alert("Returning bcause not 4");        
        return;
    }

    if (playPrompt_http_request.status == 200) {
        alert("Success finally");        
    } 
    else {        
        alert("Failure:My status is "+playPrompt_http_request.status );   // this gives status as 500     
    }
}

Also to support different browser I am using:

还支持我使用的不同浏览器:

// to provide support for different browsers.
function getNewHttpRequest(contentType) {
    var myRequest;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        myRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        myRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (myRequest.overrideMimeType) {
        myRequest.overrideMimeType(contentType);
    }
    return myRequest;
}

Additional Info: I have multiple audio files. When I play an audio file the first time, I get the failure alert first time(even though audio is played), but during if I play it again, second time, success alert is displayed.

附加信息:我有多个音频文件。当我第一次播放音频文件时,我第一次收到故障警报(即使播放音频),但是如果我再次播放它,则第二次显示成功警报。

1 个解决方案

#1


0  

Can you try this?

你能试试吗?

function ajax_playPrompt(promptId) {
       alert(promptId)
        var playPromptUrl = soapUrl + "?action=playPrompt&promptId=" + 
          escape(promptId) +     "&parentSessionId=" + parentSessionId;
       alert(playPromptUrl);
       var playPrompt_http_request = getNewHttpRequest('text/plain');
       playPrompt_http_request.onreadystatechange = function {
               if (playPrompt_http_request.readyState != 4) {
                      alert("Returning bcause not 4");        
                      return;
                  }

                     if (playPrompt_http_request.status == 200) {
                     alert("Success finally");        
              } else {        
                      alert("Failure:My status is "+playPrompt_http_request.status );
             }
       };  
       playPrompt_http_request.open("GET", playPromptUrl, true);   
       playPrompt_http_request.send(null);
 }

#1


0  

Can you try this?

你能试试吗?

function ajax_playPrompt(promptId) {
       alert(promptId)
        var playPromptUrl = soapUrl + "?action=playPrompt&promptId=" + 
          escape(promptId) +     "&parentSessionId=" + parentSessionId;
       alert(playPromptUrl);
       var playPrompt_http_request = getNewHttpRequest('text/plain');
       playPrompt_http_request.onreadystatechange = function {
               if (playPrompt_http_request.readyState != 4) {
                      alert("Returning bcause not 4");        
                      return;
                  }

                     if (playPrompt_http_request.status == 200) {
                     alert("Success finally");        
              } else {        
                      alert("Failure:My status is "+playPrompt_http_request.status );
             }
       };  
       playPrompt_http_request.open("GET", playPromptUrl, true);   
       playPrompt_http_request.send(null);
 }