Help With Ajaxbutton

I have a textarea where users submit URLs to our database. The problem is that my scripts are timing out when a user submits over 1000 URLs. So I need to use some javascript and split up the data before it gets sent to the php script. I have a very basic model working outside of Yii but need some help writing the code in Yii. Any help would be appriciated.

Here’s the code outside of yii


<?php

if(isset($_POST['urls'])):

    print_r($_POST);

else:

?>

<script type="text/javascript" src="jquery.min.js"></script>

<form action="form.php" method="post" id="target">

    <textarea name="urls" id="urls" style="width:300px;height:200px">test.com

test2.com

test3.com

test4.com

test5.com

test6.com

test7.com

test8.com

test9.com

test10.com

test11.com

test12.com

test13.com

test14.com

test15.com

test16.com

test17.com

test18.com

test19.com

test20.com

    </textarea>

    <br>

    <input type="submit">

</form>


<script type="text/javascript">

    $('#target').submit(function() {

        var urls = $('#urls').val().trim().split("\n");

        var splitArray = chunk(urls,10);

        for (var ary in splitArray){

            $.post('form.php',{'urls[]':splitArray[ary]})

        }


        return false;

    })




    function chunk (arr, len) {

        var chunks = [],

            i = 0,

            n = arr.length;

        while (i < n) {

            chunks.push(arr.slice(i, i += len));

        }

        return chunks;

    }

</script>

<?php

endif;

?>

My model is just a basic gii generated model - nothing really special there

Here’s my controller:


public function actionAdd()

	{

        $this->seoAuthenticate();

        $model=new Urls;

        if(isset($_POST['Urls'])):

            $model->attributes=$_POST['Urls'];


            $urls = explode("\n", $model->urlList);

            $success = 0;

            $error = 0;

            foreach($urls as $url)

                if(!empty($url)): // don't save empty lines

                    $newUrl=new Urls; //That's what you want: an extra model for each name

                    $newUrl->url = trim($url);

                    $newUrl->statusID = 1;

                    $newUrl->date = date("Y-m-d");

                    $newUrl->posts = 0;

                    $newUrl->clientID = Yii::app()->user->getId();

                    if($newUrl->validate()):

                        if($newUrl->save()):

                            $success++;

                        endif;

                    else:

                        $error++;

                    endif;

                endif;

            if($success > 0)

                Yii::app()->user->setFlash('success', $success . ' URLs added.');

            if($error > 0)

                Yii::app()->user->setFlash('error', $error . ' duplicate or malformed URLs were not added.');

            $this->redirect('/urls/new/');

            /*$this->render('add',array(

                'model'=>$model,

            ));*/

        else:

            $this->render('add',array(

                'model'=>$model,

            ));

        endif;

	}

And my view (using yii-bootstrap)


<?php

/* @var $this UrlsController */

/* @var $model Urls */


?>

<div class="span12" style="margin: 50px 0 10px"><?php

    $this->widget('ext.widgets.controlBar');?>

</div>

<h1 class="title">Add Urls</h1>


<?php $this->widget('bootstrap.widgets.TbAlert', array(

    'block'=>true, // display a larger alert block?

    'fade'=>true, // use transitions?

    'closeText'=>'&times;', // close link text - if set to false, no close link is displayed

    'alerts'=>array( // configurations per alert type

        'success'=>array('block'=>true, 'fade'=>true, 'closeText'=>'&times;'), // success, info, warning, error or danger

    ),

)); ?>


<div class="form">


    <?php $form=$this->beginWidget('CActiveForm', array(

        'id'=>'urls-form',

        'enableAjaxValidation'=>false,

        'htmlOptions'=>array(

            'onsubmit'=>'return false',

        ),

    )); ?>


    <p class="note">Add 1 URL per line</p>


    <?php echo $form->errorSummary($model); ?>


    <div class="row" style="margin-left:0">

        <?php echo $form->labelEx($model,'urlList'); ?>

        <?php echo $form->textArea($model,'urlList',array('style' => 'width:90%;height:500px')); ?>

        <?php echo $form->error($model,'urlList'); ?>

    </div>


    <div class="row buttons" style="margin-left:0">

        <?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'label'=>'Submit')); ?>

        <?php //echo CHtml::submitButton('Save'); ?>

    </div>


    <?php $this->endWidget(); ?>


</div><!-- form -->

This currently returns an alert for the number of URLs submitted - will want to use some form of real time feedback between calls - probably a progress bar from bootstrap.

Thanks for your help