如何动态设置Ajax URL?

时间:2014-05-10 09:33:11

标签: php ajax laravel

我正在使用Laravel 4,我想用Ajax执行验证。我有两个主要问题: 1. Ajax的URL是静态的,这意味着如果我的应用程序在线,我应该把URL放在网上,本地不起作用 2.我的路线是insur_docs / {id}应该如何成为这个网址?

jQuery('form#insur_docs_update').submit(function()
    {
        jQuery.ajax({
            url: "http://localhost:8080/insur_docs/{id}", //my url I don't know how to put it
            type: "post",
            data: jQuery('form#insur_docs_update').serialize(),
            datatype: "json",
            beforeSend: function()
            {
                jQuery('#ajax-loading').show();
                jQuery(".glyphicon-warning-sign").hide();
            }
        })
                .done(function(data)
                {
                    $('#validation-div').empty()
                    if (data.validation_failed === 1)
                    {
                        var arr = data.errors;
                        jQuery.each(arr, function(index, value)
                        {
                            if (value.length !== 0)
                            {
                                $("#validation-div").addClass('alert alert-danger');
                                document.getElementById("validation-div").innerHTML += '<span class="glyphicon glyphicon-warning-sign"></span>' + value + '<br/>';
                            }
                        });
                        jQuery('#ajax-loading').hide();
                    }
                })
                .fail(function(jqXHR, ajaxOptions, thrownError)
                {
                    alert('No response from server');
                });
        return false;
    });

routes.php文件

Route::get('insur_docs/{id}', 'Insur_DocController@edit');

控制器

public function update($id) {
        Input::flash();
        $data = [
            "errors" => null
        ];
        $rules = array(
            "ownership_cert" => "required",
            "authoriz" => "required",
            "drive_permis" => "required",
            "sgs" => "required",
            "tpl" => "required",
            "kasko" => "required",
            "inter_permis" => "required",
        );
        $validation = Validator::make(Input::all(), $rules);
        if ($validation->passes()) {
            $car_id = DB::select('select car_id from insur_docs where id = ?', array($id));
            $data = InsurDoc::find($id);
            $data->ownership_cert = Input::get('ownership_cert');
            $data->authoriz = Input::get('authoriz');
            $data->drive_permis = Input::get('drive_permis');
            $data->sgs = Input::get('sgs');
            $data->tpl = Input::get('tpl');
            $data->kasko = Input::get('kasko');
            $data->inter_permis = Input::get('inter_permis');
            $data->save();
            return Redirect::to('car/' . $car_id[0]->car_id);
        } else {
            if (Request::ajax()) {
                $response_values = array(
                    'validation_failed' => 1,
                    'errors' => $validation->errors()->toArray()
                        );
                return Response::json($response_values);
            }             
        }
    }

2 个答案:

答案 0 :(得分:0)

var myUrlExtension = "whatever.php"

并在ajax内部

url: "http://localhost:8080/insur_docs/" + myUrlExtension

答案 1 :(得分:0)

使用laravel的url生成器帮助器来创建表单的操作:

<form action="{{ URL::action('Insur_DocController@edit', $id) }}" method="post">

您可以在javascript中访问它:

jQuery('form#insur_docs_update').submit(function()
{
    var url = $(this).attr("action");

    jQuery.ajax({
        url: url,
        type: "post",
        data: jQuery('form#insur_docs_update').serialize(),
        datatype: "json",
        beforeSend: function()
        {
            jQuery('#ajax-loading').show();
            jQuery(".glyphicon-warning-sign").hide();
        }
    });
}

修改

你的第二个问题是你正在重定向以响应ajax调用,并且不会重定向页面。你需要返回url并在javascript中进行重定向。

控制器:

return Response::json(["redirect_to" => 'car/' . $car_id[0]->car_id]);

JS(只是相关部分):

.done(function(data)
{
    $('#validation-div').empty()
    if (data.validation_failed === 1)
    {
        // your code
    } else {
        window.location = data.redirect_to;
    }
})