PDA

View Full Version : سوال: ارسال نشدن مقادیر فرم به صورت post با ajax برای دومین تلاش برای ارسال



Black_Hammer
یک شنبه 30 آبان 1395, 18:08 عصر
سلام لطفا راهنمایی بفرمایید. من کدی نوشتم که با استفاده از یک دکمه یک فرم به سند اضافه می کنم و به روش post و ajax اطلاعاتش به سمت سرور ارسال می شه . اما وقتی برای دوم ارسال می کنیم ajax ی نمی ره و صفحه جدید باز می شه و پیامی که از سرور ارسال شده توی اون صفحه جدید اضافه می شه.

میشه بفرمایید مشکل کجاست؟

plague
یک شنبه 30 آبان 1395, 21:25 عصر
مشکل اینجاست که کدت رو نزاشتی و کسی نمیتونه کمکت کنه

Black_Hammer
دوشنبه 01 آذر 1395, 21:14 عصر
مشکل اینجاست که کدت رو نزاشتی و کسی نمیتونه کمکت کنه

اینم کد ممنون می شم راهنمایی بفرمایید.

این متغیری هست که فرم رو توش تعریف کردم


var form = $('<div id="answerTxt">' +
'<form action="/Software/Answer" id="answerForm" metod="post">' +
'<input type="hidden" name="commentId" id="a"/>' +
"<br />" +
'<input type="text" id="Name" name="userName" placeholder="نام شما" required />' +
'<input type="email" id="Mail" name="email" placeholder="Example@Example.com" required />' +
"<br />" +
'<textarea id="answerTextArea" name="text" placeholder="پیام شما" required></textarea>' +
"<br />" +
'<input type="submit" value="پاسخ" id="sbtComment" />' +
"<br />" +
"<br />" +
"</form>" +
"</div>");



حالا فرم رو به صفحه اضافه می کنم


var answerButton = $(".sbtComment");
for (i = 0; i < answerButton.length; ++i) {
answerButton[i].onclick = function () {
if (isAnswerFormShow === false) {
$($($(this).parent()).parent()).after(form);
$("#answerTxt").slideToggle("slow");
$(form).find("#a").attr("value", $(this).attr("id"));
isAnswerFormShow = true;
} else {
$("#answerTxt").slideToggle("slow", function() {
$(form).remove();
isAnswerFormShow = false;
});

}
}
}


برای این کار یه آرایه ساختم که تمام دکمه هایی که کلاس ".sbtComment" رو دارن دریافت می کنه و به صورت یک به یک یک فانکشن براشون درنظر میگیره که فرم رو به document اضافی می کنه
((((البته یک مشکل هم اینجا دارم که وقتی روی یک دکمه کلیک می کنی و بعد فرم رو می بندی و وقتی روی یکی دیگه از باتن های با همون کلاس کلیک می کنی باز هم همون قسمت فرم باتن قبلی باز می شه )))))


و حالا event submit فرم رو اینجوری handel می کنم



$(form).find("form").on("submit", function (event) {
event.preventDefault();
$.post("/Software/Answer", $(form).find("form").serialize(), function (data) {
alert(data);
$(form).slideUp("slow");
$(form).remove();
isAnswerFormShow = false;
});
});




یک مشکل دیگه هم داره و اون اینکه وقتی اون فرمی رو که after() کردم reamove می کنم و دوباره after() می کنم دیگه ایجکسی نمی فرسته و صفحه post back می شه

بازم ممنون اگه بخش دیگه ای هم خواستید بگید تا بزارم . از سرور هم که فقط یک string برگشت داده می شه

Black_Hammer
سه شنبه 02 آذر 1395, 07:07 صبح
بفرمایید این هم یک sample ساده که وقتی برای دومین بار دکمه ارسال رو می زنیم صفحه postBack می شه درواقع وقتی که اون فرمی که به سند اضافه کردیم رو حذف و دوباره ایجاد می کنیم (چه قبل از اجرا و چه بعد از اجرا) صفحه postBack می شه و به صورت ajax ی ارسال نمی شه . خواهش می کنم راهنمایی بفرمایید ممنون.




<body>
<button>Create form</button>
<script>
$(document).ready(function() {
var form = $('<form>' +
'<br/>' +
'<br/>' +
'<input type="text" name="servertext" id="txt1" placeholder="متن 1"/>' +
'<input type="text" name="serverText2" id="txt2" placeholder="متن 2"/>' +
'<br/>' +
'<br/>' +
'<input type="submit" id="sbt" value="submit"/>'+
'</form>');
$("button").click(function() {
$(this).after(form);
});
$(form).on('submit', function (event) {
event.preventDefault();
alert("submit Event");
$.post("/Home/GetText", $(form).serialize(), function (data) {
$(form).remove();
alert(data);
});
});
});
</script>
</body>

plague
سه شنبه 02 آذر 1395, 18:28 عصر
این خط رو

$(form).on('submit', function (event) {
تغییر بده به

$(document).on('submit' , 'form' , function (event) {

اگه میخاید ایجکس استفاده کنی دیگه نیازی به فرم و رویداد نوشتن برای سابمیتش نداری چرا بیخود پیچیده بکنیم کار رو

فرم نزار برای اون دکمه ثبت رویداد رو بنویس

_Pooya_
چهارشنبه 06 بهمن 1395, 12:39 عصر
سلام منم یه برنامه ای رو نوشتم که از طریق Ajax فایل به همراه یه متنی رو به سرور میفرسته . روی سیستم لوکال خودم کار میکنه ولی وقتی از روی کلاینت صدا میزنم پیداش نمیکنه. میشه راهنماییم کنید.