当我点击jQuery UI对话框Save
按钮时,我正在尝试发送一个AJAX请求,这就是我这样做的方式:
$(function () {
var comment_dlg = $('#add_comment_dialog');
var quote_id = $('#comment_quote_id');
$('#order_push').click(function () {
quote_id.val($(this).data('id'));
comment_dlg.dialog('open');
});
comment_dlg.dialog({
title: "Write a comment",
autoOpen: false,
modal: true,
width: 600,
height: 300,
buttons: {
Cancel: function () {
$(this).dialog('close');
},
'Save': function () {
$.ajax({
url: Routing.generate('push_order_xml'),
method: 'GET',
data: { quote_id: quote_id },
cache: false
}).done(function (data, textStatus, jqXHR) {
if (data.success.length) {
alert(data.success);
} else {
alert('Something went wrong!');
}
});
}
}
});
});
但是我收到了这个错误:
未捕获的TypeError:非法调用
我不确定问题出在哪里。我已经多次检查过jQuery UI Dialog和jQuery $ .ajax文档,我的代码似乎是正确的。
有什么想法吗?
答案 0 :(得分:0)
好的,最后,感谢this answer我弄明白问题的来源。
首先,因为这个:
var quote_id = $('#comment_quote_id')
quote_id
的值是整个HTML,而不是我预期的值。
其次,我在这里为$('#comment_quote_id')
分配了一个值:
quote_id.val($(this).data('id'));
这是正确的。
第三,我的错误是在这里使用quote_id
:
data: { quote_id: quote_id }
这是 - 再次 - 错误,因为整个HTML而不是值本身。
解决方案,使用quote_id.val()
例如:
data: { quote_id: quote_id.val() }
我无法使用processData: false
,因为我不想传递HTML而是传递值。