Php jQuery加载<;按钮>;而不是href

Php jQuery加载<;按钮>;而不是href,php,jquery,Php,Jquery,我目前有一个购物车,我正在加载到我自己的自定义仪表板使用例如一个html页面加载php购物车页面到我自己的html文件 $app->get('/cata-categories/?', function () use ($app) { $app->render('cata-categories.html', [ 'page' => [ 'author' => $a

我目前有一个购物车,我正在加载到我自己的自定义仪表板使用例如一个html页面加载php购物车页面到我自己的html文件

$app->get('/cata-categories/?', function () use ($app) {   
           $app->render('cata-categories.html', [
               'page' => [
                   'author' =>         $app->site->author,
                   'title' =>          "Catagories",
                   'description' =>    "Catalogue Catagories.",
                   'alerts' =>         $app->alerts->getAndClearMessages()
               ]
           ]);  
        });
为了让它正常工作,我在我自己的仪表板页面的div内加载购物车页面的链接

<ol id="categories"></ol>

                <script>
                    $( "#categories" ).load( "../solutions/admin/index.php?route=catalog/category" );
                </script>
我还可以使用按钮提交表单或加载/链接到其他页面: 例如

首先,如果您希望在不导致页面加载的情况下提交表单,建议您使用AJAX

其次如果您仍打算使用
$.load()
您可以在按钮中设置
数据-*
属性,例如说
数据url=“您的url”



现在使用
jQuery
捕获单击事件,防止其默认值,并使用
.attr(“数据url”)
加载数据,表单的操作将告诉您url

根据表单是发出GET请求还是POST请求,您需要以不同的方式表示数据

大致如下:

$("button").on('click', function (e) {
    var $f = $(this.form);
    var data;
    if (f.attr("method").toLowerCase() === "post") {
        data = $f.serializeArray();
    } else {
        data = $f.serialize();
    }
    $("#categories").load(
        $f.attr("action") || location.href,
        data
    );
    e.preventDefault()
});

…可能会成功,但我还没有测试过。

所以我意识到我在这方面出了什么问题。购物车具有验证表单/提交等功能,我只需要使用

$this->response->redirect('../../portal/cata-categories');
我使用.load将购物车页面插入到仪表板的方式意味着我显然没有被重定向回它们来自的同一个URL。它直接进入购物车页面,而不是我的仪表板页面,在其中加载购物车页面


觉得有点傻之前没有看到它,但它是固定的!感谢大家的输入-一如既往非常有用:)

如果您想提交表单而不导致页面加载,您需要使用AJAX。为此,您需要使用
$.post()
$.get()
、或
$.ajax()
(取决于您的需求)而不是
load()
。在数据属性中复制表单的操作是多余的。@Quentin只是为了方便起见,OP已经询问了Hanks,我今天将对此进行测试并报告。
<input type="submit" data-url="your-url" value="Load" />
$("button").on('click', function (e) {
    var $f = $(this.form);
    var data;
    if (f.attr("method").toLowerCase() === "post") {
        data = $f.serializeArray();
    } else {
        data = $f.serialize();
    }
    $("#categories").load(
        $f.attr("action") || location.href,
        data
    );
    e.preventDefault()
});
$this->response->redirect('../../portal/cata-categories');