每次Jquery ajax成功响应最终都是未定义的

时间:2015-05-07 01:17:29

标签: jquery ajax

我正在使用文本JqTE插件进行富文本编辑。但是,在使用ajax调用填充大数据的文本区域时,我遇到了问题。这似乎与异步调用有关。

function filldata(CusID)
{
         var returningData;
         var data = {   CustomerId: CusID     }     
         data = JSON.stringify(data);
         $.ajax({
             type: "POST",
             contentType: "application/json; charset=utf-8",
             url: "Services.svc/GetConditions",
             data: data,

             dataType: "json",
             success: function (result) {
                 var TermsCondition = $($.parseXML(result.GetConditions)).find("Table").find("CommunicationTermsAndConditions").html();
/*TermsCondition will be something like 3000chars.*/
             $("#hdnTerms").val(TermsCondition);
            return true;
                });

}

        var IsAjaxsucces =  filldata(CusID);
        if(IsAjaxsucces){
        --Code that depends on $("#hdnTerms")
        } 

我在一段时间后点击按钮事件后调用此方法。但每次我发现我的隐藏字段是#hdnTerms是空的。当我在调试器中尝试时,条件条件正在填充我期望的正确数据。

在ajax成功完成之前,我不想执行其他代码,因此TermsCondition值不会为空。

2 个答案:

答案 0 :(得分:0)

您没有从filldata()返回值,然后您会惊讶filldata()没有返回值。

首先,您应该返回从$ajax()获得的值。

其次,该值将成为您的成功函数的返回值。 Ajax返回一个“Promise”,这个结构有一天会给你所需的值。

像这样:

function filldata(CusID)
{
  ...
  return  $.ajax({
     ...
  });
}

filldata(CusID).then(function(isAjaxSuccess){
  // Code that depends on $("#hdnTerms")
});

阅读Promises here

答案 1 :(得分:0)

function filldata(CusID)
{
         var returningData;
         var data = {   CustomerId: CusID     }     
         data = JSON.stringify(data);
         $.ajax({
             type: "POST",
             contentType: "application/json; charset=utf-8",
             url: "Services.svc/GetConditions",
             data: data
             dataType: "json"}).done(function(result){
                    var TermsCondition = $($.parseXML(result.GetConditions)).find("Table").find("CommunicationTermsAndConditions").html();
                   /*TermsCondition will be something like 3000chars.*/
                    $("#hdnTerms").val(TermsCondition);
                   //You have to validate here
                  --Code that depends on $("#hdnTerms")
                    return true;
                });

}

如果这对您没用,则应使用 async:false