我正在使用$.post
函数将从输入框收集的一些数据发送到单独的文件post_new_activity.cshtml
。我也使用警报框进行调试,以查看我得到的代码行。我试图将一个变量'activity'传递给外部文件。我得到的问题是,我不确定post方法是否正常工作,因为只弹出一个警告框(.click
函数中的那个),然后它们没有错误消息或没有更多的警告框。如何检查$.post
是否正常工作。
我真的很喜欢jQuery,所以任何帮助都会非常感激。
以下是一些代码段:
带输入框的模态和id =“modal_btn_submit”的按钮
<div id="modal_add_activity" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Add an Activity to the Database</h4>
</div>
<div class="modal-body">
<label for="modal_activity_input">Enter activity name: </label>
<input id="modal_activity_input" value="">
<br>
<p>Once you press <b class="text-success">Add to Webpage </b>the action can not be undone</p>
</div>
<div class="modal-footer">
<button type="button" id="modal_btn_submit" class="btn btn-success" data-dismiss="modal">Add to Webpage</button>
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
</div>
</div>
调用$ .post方法的jQuery函数
$("#modal_btn_submit").click(function () {
var activity = $("#modal_activity_input").val();
alert("Adding " + activity);
$.post("post_new_activity.cshtml", $(activity),
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
});
});
post_new_activity.cshtml,由$ .post方法调用
@{
alert("cshtml file loaded");
var activity= Request["add_activity"];
alert("From cshtml file activity: " + activity);
var string_return= activity + " Added.";
Json.Write (string_return, Response.Output);
}
答案 0 :(得分:0)
post_new_activity.cshtml
期待add_activity
的{{1}}财产? ,见POST
。虽然问题var activity= Request["add_activity"];
上的js
数据似乎POST
包含在$("#modal_activity_input").val();
的调用中,jQuery()
会返回jQuery对象,但是$.post("post_new_activity.cshtml", $(activity)
?
尝试将数据发布为{"add_activity": activity}
$.post("post_new_activity.cshtml", {"add_activity": activity},
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
});
答案 1 :(得分:0)
假设cshtml代码有效,因为我不知道,我建议一些关于javascript的东西。
对$ .post的调用有一个奇怪的参数$(activity)
。
$(/*string|array|dom element*/)
是jQuery的一个特殊功能,用于评估与DOM相关的表达式。
例如,它可以在给定字符串$('<div></div>');
的情况下创建新的DOM元素,然后可以将其附加到文档中
$("body").append($('<span></span>')
。
或者,它可以从DOM中选择现有元素(关键字:css选择器,sizzle)$("div");
。
这使您可以访问文档中存在的所有div
个节点
最后,最后一种用法是数组迭代,例如
$(['some']).each(function(k,v){ /* */ });
鉴于此,您的使用$(activity)
似乎有误,因为它要求jquery在给定值$("#modal_activity_input").val()
的情况下查找/创建元素。
我的理解是你要发布该输入的字符串值,而不是jQuery表达式的结果。
然后,$.post
的第二个参数应该是一个可序列化的对象。一个对象只包含普通值,而不包含任何引用。
你应该重写它,如guest271314所述
$.post("post_new_activity.cshtml", {"add_activity": activity},
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
});
第二个问题,如何获得错误?
我怀疑当出现问题时,cshtml框架会回答一个特定的HTTP错误代码,即5xx或4xx而不是200。
在这种情况下,jQuery不会返回到您的响应函数,而是返回到失败处理程序。
在内部,它正在使用promise实现(关键字$ .defer,$。when,javascript promise,Q)。
要捕获这些错误,您需要以这种方式编写,
$.post("post_new_activity.cshtml", {"add_activity": activity},
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
}).fail(function(){
console.log(arguments);
});
如果您想捕获每个响应,无论其状态如何,您都可以使用always
处理程序。
$.post("post_new_activity.cshtml", {"add_activity": activity},
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
}).fail(function(){
console.log(arguments);
}).always(function(){
console.log(arguments);
});
如你所见,它们是可链接的。
在该示例中,如果失败,它将执行fail + always handlers。
如果成功,它将执行响应处理程序+始终处理程序。
HTH。
答案 2 :(得分:0)
您只需要在这类问题中检查您的控制台,
如果您使用谷歌浏览器按f12 键或右键单击检查元素,那么您将能够找到控制台,
如果您使用的是Firefox Ctrl + Shift + K ,
我也创造了一个小提琴,
$("#modal_btn_submit").click(function () {
var activity = $("#modal_activity_input").val();
alert("Adding " + activity);
$.post("http://stackoverflow.com/", $(activity),
function (data, status) {
alert("Activity: " + data + "\nStatus: " + status);
console.log(data);
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="modal_btn_submit" >click</a>
<input type="text" value="1234" id="modal_activity_input"/>
&#13;
数据传递正常工作