AJAX 表单提交命中正确的终结点,但不传递变量
AJAX form submission hits proper endpoint but doesn't pass variables
在用户购买产品之前,我正在评论页面上工作,页面上有一个折扣代码的小字段,我想通过 ajax 将其传递给端点。我正在使用以下 javascript 函数,提交发生并返回(甚至命中预期的端点( - 但没有数据通过(在日志中验证(。
知道为什么没有参数会通过吗?
<script>
$("#discount_code_submit").click(function() {
var url = "/confirm_discount"; // the script where you handle the form input.
$.ajax({
type: "POST",
url: url,
data: $("#discount_form").serialize(), // serializes the form's elements.
success: function(data)
{
alert(data); // show response
if(data != "false")
{
console.log(data);
}
}
});
return false; // avoid to execute the actual submit of the form.
});
</script>
这是因为 jQuery 的序列化方法以传统的 url 查询字符串格式创建表单数据的 String 表示形式。(请看这里: http://api.jquery.com/serialize/(
例如,调用 serialize 可以返回一个字符串,例如:
'?query=help&numResults=200'
另一方面,jQuery的ajax方法期望表单数据作为对象文字提供。(请看这里:http://api.jquery.com/jQuery.ajax/(
例如
{
query: 'help',
numResults: 200
}
因此,您可以将 ajax 调用更改为如下所示:
$.ajax({
type: "POST",
url: url,
data: {
param1: 'somevalue',
param2: 200
},
success: function(data)
{
alert(data); // show response
if(data != "false")
{
console.log(data);
}
}
});
或者,您也可以使用自定义函数从窗体构造对象文本,然后在 ajax 调用中提供引用。
$.ajax({
type: "POST",
url: url,
data: myPreparedObjectLiteral,
success: function(data)
{
alert(data); // show response
if(data != "false")
{
console.log(data);
}
}
});
您也可以使用 http://api.jquery.com/serializeArray/因为它几乎可以完成将表单转换为 json 文字表示所需的功能。
最后,关于将表单转换为 json 对象进行发布的重要讨论,您可以在此处查看有关 SO 问题的回答:使用 jQuery 将表单数据转换为 JavaScript 对象
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 将变量传递给外部Javascript
- 如何将getJson的响应保存在全局变量中