Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用延迟对象/承诺时Ajax调用返回失败_Javascript_Ajax_Jquery - Fatal编程技术网

Javascript 使用延迟对象/承诺时Ajax调用返回失败

Javascript 使用延迟对象/承诺时Ajax调用返回失败,javascript,ajax,jquery,Javascript,Ajax,Jquery,我只是对它失望了几个小时,需要一些真正的专家的帮助。 在下面的代码中,我希望单击带有classfb\u detail\u btn的按钮后会附加从.ajax函数返回的数据结果。但是,发生的情况是,一旦ajax运行,以前非ajax附加的数据($(this).append(“aaaaaa”);)将始终被擦除我的测试显示php文件已经正确运行,所以问题是为什么ajax返回的数据不能被作为变量分配给$(this)。 JavaScript //GET FEEDBACK DETAIL METHOD// fun

我只是对它失望了几个小时,需要一些真正的专家的帮助。 在下面的代码中,我希望单击带有class
fb\u detail\u btn
的按钮后会附加从.ajax函数返回的数据结果。但是,发生的情况是,一旦ajax运行,以前非ajax附加的数据(
$(this).append(“aaaaaa”);
)将始终被擦除我的测试显示php文件已经正确运行,所以问题是为什么ajax返回的数据不能被作为变量分配给$(this)。

JavaScript

//GET FEEDBACK DETAIL METHOD//
function get_feeback_detail(result) {
    alert('inside get_feeback_detail, btn_clicked_id is '+btn_clicked_id);
    return $.ajax ({
        type: "POST",
        url: "../x_get/get_feedback_detail.php",
        data:{fb_id: btn_clicked_id},
    }).then(function(data) {
                alert('then ran!');
                //loading_effect_hide();
                var dataSplit = data.split("|");
                commCode = dataSplit[0];
                //alert(dataSplit[1]);
                if(commCode !=1){
                    $('#testInfo').html(dataSplit[1]);
                    $('#testInfo').addClass("errorRed");
                    //$('.fb_review_table_section').empty();
                    alert('returned false for then in ajax!');
                    return false;
                }else{
                    result =dataSplit[1];
                }   
                alert('result inside then is...   '+result);
                //alert(selectedDiv.attr('class'));
                //return result;
                selectedDiv.append(result);
            //loading_effect_hide();    

    }).fail(function(x,s,e) {
            alert(s+": "+e);
            alert('detail button failed!');// an error occurred

            //alert(result);
        });//$.ajax END

    alert('inside get_feeback_detail, result is...   '+result);


};//get_feeback_detail() END



//Detail Button
$(document).on('click','.fb_detail_btn',function(){
    selectedDiv=$(this);
    selectedDiv.append("<div>aaaaaa</div>");
    elementPropertyName = selectedDiv.attr('name');
    btnNames = $(this).attr("name").split("_");
    btn_clicked_id=btnNames[1];
    result="";
    get_feeback_detail();
    selectedDiv.append("<div>bbbbbbb</div>");
}); 
//获取反馈详细信息方法//
函数获取\u反馈\u详细信息(结果){
警报('inside get_feeback_detail,btn_clicked_id为“+btn_clicked_id”);
返回$.ajax({
类型:“POST”,
url:“../x\u get/get\u feedback\u detail.php”,
数据:{fb\u id:btn\u单击\u id},
}).then(功能(数据){
警惕(“然后跑!”);
//加载效果隐藏();
var dataSplit=data.split(“|”);
commCode=dataSplit[0];
//警报(数据分裂[1]);
如果(commCode!=1){
$('#testInfo').html(dataSplit[1]);
$('#testInfo').addClass(“errorRed”);
//$('.fb_review_table_section')。空();
警报('在ajax中返回false!');
返回false;
}否则{
结果=数据片段[1];
}   
警报('内部结果为…'+结果);
//警报(selectedDiv.attr('class'));
//返回结果;
选择iv.追加(结果);
//加载效果隐藏();
}).失败(功能(x、s、e){
警报(s+“:”+e);
警报('详细信息按钮失败!');//发生错误
//警报(结果);
});//$.ajax结束
警报(“内部获取反馈详细信息,结果为…”+结果);
};//获取详细信息()结束
//细节按钮
$(文档).on('click','.fb_detail_btn',function(){
selectedDiv=$(此项);
选择iv.附加(“AAAAA”);
elementPropertyName=selectedDiv.attr('name');
btnNames=$(this.attr(“name”).split(“”);
btn_单击_id=btn名称[1];
结果=”;
获取详细信息();
选择iv.追加(“bbbbb”);
}); 
HTML

aadadadad
=更新=
目前,工作的结果将达到。然后,结果将不会被追加。

您误用了承诺

您需要从
then()
回调返回新结果:

    return $.ajax ({
        type: "POST",
        url: "../x_get/get_feedback_detail.php",
        data: 'fb_id='+btn_clicked_id,
        dataType:'json',//ACW-soemthing new!
    }).then(function(data) {
        ...
        return result;
    });
此代码无法工作:

Ajax是异步的!正如您在警报中看到的,当该零件运行时,结果是
未定义。它仅在回调中可用!阅读,并使用


我有点困惑什么时候接受btn\u clicked\u id作为get\u feeback\u detail中ajax的变量,但是从函数get\u feeback\u detail返回结果后,我应该将返回的结果放在哪里?当btn\u单击\u id时?我很困惑…@Chen:你不应该打电话给ajaxComplete。
then()
回调在您得到响应后运行,您需要直接从中返回转换后的值。我刚刚再次更新,修复了失败问题,但仍然无法在数据出现时追加它。谢谢谢谢你的帮助,但更详细地说,我的工作确实需要字符串,但它不会加载到corosponding单元中。谢谢@陈:使用调试器来发现问题。可能是@Bergi的重复,我提出的解决方案实际上是受你提到的帖子启发的,但我认为我没有正确使用它。如果可以,请帮助我解决此特定问题,我将非常感激,然后使用
.fail(函数(x,s,e){alert(s+”:“+e);})
查看它失败的原因,不仅仅是它失败了。可能您的服务器没有按预期响应,请在您的开发工具中使用网络检查器。@Bergi,新的更新版本可以工作,但仍然无法根据您的方法将结果附加到固定代码中,但我现在更困惑了。是否要运行selectedDiv.append(结果);里面。然后取出返回结果?我尝试了它并更新了代码,它仍然不起作用。你能帮我找到代码中的错误吗?我昨天做了很多个小时,我仍然找不到原因。是的,这正是我建议的。你是否尝试实际执行代码?我尝试了你的解决方案,但没有成功…当然我没有尝试,我不知道你的
数据是什么。如果你不告诉我什么不起作用,我就帮不了你…
    return $.ajax ({
        type: "POST",
        url: "../x_get/get_feedback_detail.php",
        data: 'fb_id='+btn_clicked_id,
        dataType:'json',//ACW-soemthing new!
    }).then(function(data) {
        ...
        return result;
    });
return $.ajax ({
    …
}).then(function(data) {
    … // callback
    return result;
}); //$.ajax END

alert('inside get_feeback_detail, result is...   '+result);
selectedDiv.append(result);
return $.ajax ({
    …
}).then(function(data) {
    … // callback
    // return result; 
    alert('inside ajax callback, result is...   '+result);
    selectedDiv.append(result); // works now!
});