jQuery $ .ajax和jQuery UI对话框:Uncaught TypeError:非法调用?

时间:2017-06-02 12:06:51

标签: javascript jquery jquery-ui jquery-ui-dialog

当我点击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文档,我的代码似乎是正确的。

有什么想法吗?

1 个答案:

答案 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而是传递值。