yii,ajax,javascript没有调用动作

时间:2014-07-30 19:08:42

标签: javascript jquery ajax yii

我正在尝试将数据发布到yii中带有ajax的操作。目前我很难在行动中编码真假,以确定我是否发布数据,而且它没有到达那里。 我似乎无法弄清楚我哪里出错了。任何信息都会有所帮助,谢谢

下面的JS / AJAX:

    function printObject(o) {  // alerts an object
        var out = '';
        for (var p in o) {
            out += p + ': ' + o[p] + '\n';
        }
        alert(out);
    }

    $(function() {
        var dialog, form,
            //select ticket_code, I don't know if this is working properly
            ticket_code = $( "#ticket_code"), 
            allFields = $( [] ).add( ticket_code ),
                tips = $( ".validateTips" );

        function addTicket() {
            var valid = false;
            //alert ticket_code (however, it only alerts a long error message)
            //saying that the length is 1, but not sure if that is correct
            //see link at the end for error message. 
            printObject(ticket_code);
            $.ajax({
                type: "POST",
                url: '<?php echo Yii::app()->createUrl('ticket/addTicket'); ?>',
                data: {ticket_code : ticket_code},
                success: function(){
                    alert('got here');
                    valid = true;
                }
            });
            alert("after ajax");
            if ( valid ) {
                dialog.dialog( "close" );
                alert('yay');
            }
        }

下面的actionAddTicket:

public function actionAddTicket(){
    if(isset($_POST['ticket_code'])){
        return true;
    }
    return false;
}

下面的表单视图:

<div id="dialog-form" title="Add a Ticket">
<p class="validateTips">Please Enter Ticket Number</p>
<form>
    <fieldset>
        <label for="ticket_code">Ticket Code #</label>
        <input type="text" name="ticket_code" id="ticket_code" placeholder="000-0000" class="text ui-widget-content ui-corner-all" title="You can find this on the bottom right hand side of your ticket">
        <img src="/images/faq-ticket-codes.png" width="150";/>
        <input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
    </fieldset>
</form>

the alerted object value for ticket_code

1 个答案:

答案 0 :(得分:1)

问题似乎是由两件事引起的:

  1. AJAX请求是异步的,这意味着紧接调用$.ajax之后的JavaScript行会在AJAX请求重新进入之前执行,或者很可能会执行。它变成了竞争条件。

  2. ticket_code = $( "#ticket_code")是一个jQuery对象。然后,将其作为ticket_code属性传递给请求data,jQuery正在尝试将其序列化为字符串。 jQuery认为ticket_code是一个HTMLInputElement(例如<input type="text">),当它实际上是一个jQuery对象时,所以没有办法将它序列化为字符串。

  3. 在AJAX请求返回浏览器之后,您想要做的任何事情都应该在success回调中完成。其次,在创建要在请求中传递的数据时,您需要使用ticket_code.val()

    function addTicket() {
        var valid = false;
    
        $.ajax({
            type: "POST",
            url: '<?php echo Yii::app()->createUrl('ticket/addTicket'); ?>',
            data: {ticket_code : ticket_code.val()},
            success: function(){
                // ticket_code is valid
                dialog.dialog( "close" );
            }
        });
    }