سلام
من یه تابع ایجکسی ایجاد کردم که یه مقدار string رو برمیگردنه، حالا میخوام وقتی که از این تابع در صفحاتم استفاده کنم مقدار undefined برمیگردونه.
<script> function GetValueFromXml(text) { $.ajax({ url: '@Url.Action("GetValueFromXml", "Tools")?text=' + text, type: "POST" }).success(function (data) { return data; }).error(function (xhr) { return text; }); } </script>
من میتونم یه id برای div یا span ویا ....تعریف کنم و مقدار رو به اونها نسبت بدم ولی این راه حل برای کار من مناسب نیست.
<script> function GetValueFromXml(text, boxId) { $.ajax({ url: '@Url.Action("GetValueFromXml", "Tools")?text=' + text, type: "POST" }).success(function(data) { $("#" + boxId).html(data); }).error(function(xhr) { $("#" + boxId).html(text); }); } </script>
نحوه استفاده برای روش اول:
this.renderWidget = function () { var html = "<p><i>" + window.GetValueFromXml("Filter by type of place") + '</i></p>\ <select style="width:150px;" class="grid-filter-type customerslist form-control">\ </select>'; this.container.append(html); };
نحوه استفاده برای روش دوم:
this.renderWidget = function () { var html = "<p><i id='filterPlace'>" + window.GetValueFromXml("Filter by type of place", "filterPlace") + '</i></p>\ <select style="width:150px;" class="grid-filter-type customerslist form-control">\ </select>'; this.container.append(html); };
ممنون میشم برای روش اول راهنماییم کنیم.
کد اکشن را قرار دهید
خروجی اکشن از چه نوعی هست ؟
کد اکشن:
[HttpPost] public virtual ActionResult GetValueFromXml(string text) { string value = text; string culture = CmsLocalizer.GetLanguageSession(); switch (culture) { case "fa": if (CmsLocalizer.XmldocDefault.XPathSelectElement(@"/Language/Item[Text='" + text + "']/Translate") != null) value = CmsLocalizer.XmldocDefault.XPathSelectElement(@"/Language/Item[Text='" + text + "']/Translate").Value; break; case "en": if (CmsLocalizer.Xmldoc.XPathSelectElement(@"/Language/Item[Text='" + text + "']") != null) value = CmsLocalizer.Xmldoc.XPathSelectElement(@"/Language/Item[Text='" + text + "']").Value; break; default: if (CmsLocalizer.Xmldoc.XPathSelectElement(@"/Language/Item[Text='" + text + "']/Translate") != null) value = CmsLocalizer.Xmldoc.XPathSelectElement(@"/Language/Item[Text='" + text + "']/Translate").Value; break; } return Json(value, JsonRequestBehavior.DenyGet); }
به شکل زیر امتحان کنید
<script> function GetValueFromXml(text) { $.ajax({ url: '@Url.Action("GetValueFromXml", "Tools")?text=' + text, type: "POST" }).success(function (data) { return data.d; }).error(function (xhr) { return text; }); } </script>
مشکل در این قسمته که وقتی تابع صدا زده میشه تا بیاد خروجی رو برگردونه به قسمت مورد نظر چون مدت زمانش طولانی میشه برای دفعه اول undefined برمیگردونه وبعدش جواب صحیح رو برمیگردونه ولی دیگه نمیتونه برا جواب قبلی جایگزینش کنه.
برای همین وقتی از روش دوم استفاده میشه جواب رو جایگزین کل html میکنه.
من برا این مشکل و روش اول یه جواب میخواستم.
ممنون
دلیل طولانی بودن جواب چیست ؟
در کد چیز خاصی دیده نمیشه
شما چرا مستقیم در خود تابع المان مورد نر را مقدار دهی نمیکنید ؟
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)