【发布时间】:2014-05-17 17:19:50
【问题描述】:
我是第一次尝试使用 Ajax。
我收到错误的问题:uncaught referenceError: Data is not defined 我可以在 Firebug 中看到
<script>
$(function () {
var form = $("#ringMeBack");
form.submit(function () {
var emailData = {
RingMeBackName: $("#ringMeBackName").val(),
RingMeBackNumber: $("#ringMeBackNumber").val()
//, RingMeBackTime: $("#ringMeBackTime").val()
};
$.ajax({
url: "/Home/RingMeBack",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "text",
data: JSON.stringify(emailData), //THIS IS THE ERROR
success: function (response) {
alert(response);
},
error: function () {
alert("There was an error... please try again.");
}
});
return false;
});
});
</script>
@using (Html.BeginForm("RingMeBack", "Home", FormMethod.Post, new { id = "ringMeBack" }))
{
<p>
<input type="text" id="ringMeBackName" title="Optional, but it's nice to know who we are talking to." placeholder="Your name" />
</p>
<p>
<input type="text" id="ringMeBackNumber" title="We need to know the best number to call you on." placeholder="Your phone number" />
</p>
<p>
When is a good time to call you?
</p>
<p>
<select title="When is the best time to call you?" id="ringMeBackTime">
<!--don't show if it's after 2pm -->
@if (DateTime.Now.Hour < 14)
{
<option value="asap">Today, as soon as possible</option>
}
<option value="am" id="ringBackMorning" /><!--values created in Javascript-->
<option value="pm" id="ringBackAfternoon" /><!--values created in Javascript-->
</select>
</p>
<p>
<input type="submit" value="Request call back" title="Send and we'll call you back" class="redButton"/>
</p>
@ViewBag.Status
}
如果我将data: JSON.stringify(emailData) 更新为data: emailData.serialize(),则没有区别。
根据我引用的链接,如果我完全删除该行 (data: emailData.serialize()),那么它会命中我的控制器但不会传递任何值...
我不知道如何解决这个问题。
如果有帮助,我的控制器很简单
[HttpPost]
public void RingMeBack(string RingMeBackName, string RingMeBackNumber)
{
//break point set just to see if hits this
string s = "";
}
【问题讨论】:
-
emailData.serialize绝对不行。 -
只需传递
emailData而不进行任何序列化,因为 jQuery 会在内部为您进行转换。 -
data: emailData,调用error: function()。 -
如果删除 contentType 参数会怎样?
-
不是
form.serialize()吗?serialize函数用于“表单”元素,而不是随机对象api.jquery.com/serialize
标签: javascript ajax