جافا سكريبت وظيفة مع مسج آخر عائدات دائما غير معروف

StackOverflow https://stackoverflow.com/questions/1400854

سؤال

وليس لدي أي فكرة عما يحدث هنا وآمل شخص يمكن أن يساعد، وأنا متأكد أنه شيء سهل يسير على أنني مجرد عداد المفقودين.

ولدي وظيفة في جافا سكريبت أن لديه وظيفة مسج داخل منه. أود أن إرجاع النتائج من المنصب الذي هو مجرد نص ووضعها في متغير. عدد قادم مرة أخرى بشكل صحيح من المشاركة ولكن عندما وضعه في المتغير، المتغير يقول "غير معروف". أي أفكار؟

var total = GetTotalSize();
alert(total);

function GetTotalSize(){
    var i = "";
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
        i = data.toString();
        return i;
    });
}
هل كانت مفيدة؟

المحلول

وأنت لا تستطيع أن تفعل مثل ذلك. تذكر، "A" في AJAX يعني "غير متزامن". وظيفة رد الاتصال التي تقدمها ل$.post() سيتم تنفيذ بشكل جيد بعد تنفيذ GetTotalSize() والعوائد.

وستحتاج إلى إعادة هيكلة التعليمات البرمجية لاستيعاب هذا. أنا لا يمكن أن يكون محددا في توصيتي لأنني لا أعرف ما تبقى من التعليمات البرمجية الخاصة بك تبدو، ولكن هنا احتمال وارد.

$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
  doSomethingWithTotalSize( data.toString() );
});

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}

نصائح أخرى

وبيتر على حق تماما، ولكن يمكنك فرض طريقة $ .ajax للعمل بشكل متزامن عن طريق تمرير async: false.

والمشكلة هي أن كنت ستعود i خارج وظيفة الإستدعاء. في الأساس عند العودة i، ومحتوياته لا وجود لها حتى الآن، وسوف لا توجد حتى يعود خادم البيانات إلى وظيفة رد الاتصال الخاصة بك.

وهذه محاولة

function GetTotalSize(callback) {    
  $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
       callback(outputData);
    });
}

function DoSomething(data)
{
   //....
}

GetTotalSize(DoSomething);

وأنا أدرك أن هذا هو آخر من كبار السن، ولكن كان الحل بالنسبة لي لاستخدام complete:[delegate] بدلا من success. هذا يضمن أن callback كاملة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top