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

标签 javascript ajax

我有以下行为随机的 ajax 函数。有时会显示警告 success finally。在其他情况下,第二次警报是 Failure: my status is 500 显示。

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

如果出现 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     
    }
}

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

// 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;
}

附加信息:我有多个音频文件。当我第一次播放音频文件时,我第一次收到失败提示(即使播放了音频),但如果我再次播放,第二次,会显示成功提示。

最佳答案

你能试试这个吗?

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);
 }

关于javascript - Ajax 回调函数行为随机。我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23669436/

相关文章:

php - 当一个 html 加载到另一个 html 的 div 中时,document.ready jquery 不起作用

javascript - 如何旋转 HighCharts 条形图使其垂直而不是水平?

javascript - 无法在其他ajax中调用ajax

javascript - 了解回调函数参数

javascript - Node Mysql 库中的 SQL 注入(inject)

javascript - 我怎样才能停止所有ajax请求并获取最新的请求?

javascript - 我可以继续将数据从服务器推送到同一个连接吗?

Javascript:根据键的值有条件地过滤 JSON?

javascript - 多个 then 之后返回的 promise 返回未定义

javascript - 包含对象的数组,在对象内是未定义的