باستخدام $ .post داخل دالة جافا سكريبت، لا يمكن تعيين قيمة إلى متغير؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أحاول أن استخدام $ .post داخل دالة، الحصول على النتائج، ثم العودة وظيفة صحيحة أو خاطئة استنادا إلى نتائج الاستدعاء $ .post. ومع ذلك، يبدو أن رد أن يحدث، بعد وقوع الحدث عودة وظيفة الأم.

وهنا القانون الحالي المتغير المتقاعد هو دائما غير معروف ولكن إذا كنت تنبيه () في غضون الاستدعاء $ .post، فإنها ترجع النتيجة الصحيحة؛

function elementExists(key, type, path, appid, pid){
    var ret;
    $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
        ret = data;                         
    });

    alert(ret);
    return ret;

}
هل كانت مفيدة؟

المحلول

وكما كنت قد اكتشفت آخر يتم بشكل غير متزامن. إذا كنت تريد أن تكون متزامن، ستحتاج إلى استخدام ajax طريقة وتعيين المعلمة async إلى false. سيكون من الأفضل، مع ذلك، أن نعترف بأن هذا المنصب هو غير متزامن وبناء التعليمات البرمجية بحيث أن العمل الذي قام به رد مستقلة عن الطريقة التي تستدعي هذا المنصب. ومن الواضح أن كنت تريد حقا أن تفعل شيئا آخر غير حالة تأهب، ولكن من دون معرفة ما يدور حوله من الصعب أن ننصح كيفية ريفاكتور هذا.

تعديل : لأنني أفهم أن التعليمات البرمجية هو التحقق لمعرفة ما إذا كان يوجد شيء ما، لكنه التأكد من أن لغرض. إذا كنا نعرف ما كان هذا الغرض، ثم انه قد يكون من الممكن أن يوصي كيفية تحقيق ذلك في رد حتى يمكن إعادة بناء التعليمات الطريقة.

نصائح أخرى

function elementExists(key, type, path, appid, pid){
        $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
           alert(data);
        });
  }

وظيفة (بيانات) هي مكالمة هاتفية (غير المتزامن) لا يمكنك إرجاع القيم من هذا القبيل.

وأنه لا يسمى هذا الاستدعاء حتى يتم الصفحة استدعائه، ولكن بك "المتقاعد عودة" يتم تنفيذ فورا بعد استدعاء $ .post

إذا كنت تريد تعيين syncronous مجموعة المتزامن: كاذبة

واطلع على مستندات http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype

والمشكلة هي أن التعليمات البرمجية تنفيذ بشكل غير متزامن. وهذا هو في حالة تأهب (متقاعد) ويسمى في الواقع قبل المتقاعد = البيانات، والذي يحدث عندما يتم الانتهاء من طلب اياكس.

ويمكنك جعل إما اياكس المكالمات متزامن (غير مستحسن) باستخدام المتزامن الخيار، أو إعادة تصميم التعليمات البرمجية.

scroll top