bootstrap-table icon indicating copy to clipboard operation
bootstrap-table copied to clipboard

'refresh' method doesn't reuse parameters provided as "query", it only takes "url".

Open utilmind opened this issue 1 year ago • 11 comments
trafficstars

Bootstraptable version(s) affected

1.22.5 (latest)

Description

Unfortunately "refresh" button on toolbar is useless, if I originally provide the request parameters as "query" property, instead of straightforward GET-query, as part of "url" property.

So if I originally provide data as follows, this will not work on manual "refresh" (click on refresh button on toolbar), it will just ignore "query" on repeating request:

$table.bootstrapTable('refresh', {
                            url: thisToolUrl,
                            query: prepareHttpQuery(),
                        });

However, the following will work:

$table.bootstrapTable('refresh', {
                            // httpBuildQuery converts array to &-separated and urlencoded 'key=value' pairs.
                            url: thisToolUrl + '?' + httpBuildQuery(prepareHttpQuery()), 
                        });

I think it should not ignore data provided in "query" on repeating "refreshes". The workaround provided above is works for me, so I don't submitting the pool request, but would switch to "query" if it will be fixed in further Bootstrap Table versions.

Example(s)

No response

Possible Solutions

Fix initServer() method, reuse saved "query" parameter from previous "refresh" request.

Additional Context

No response

utilmind avatar May 04 '24 20:05 utilmind

Please provide an Online Example to show your problem. Thanks!

wenzhixin avatar May 05 '24 00:05 wenzhixin

We will close this issue as we got no response form you. If you still need help with that please provide us an example as @wenzhixin said.

UtechtDustin avatar May 26 '24 18:05 UtechtDustin

@UtechtDustin -- We will close, or already closing? In either case, it's can't be closed as "Completed". It's not completed.

utilmind avatar May 26 '24 19:05 utilmind

@wenzhixin here you go https://live.bootstrap-table.com/code/utilmind/17717 There are 2 buttons in example. First specifying parameters in documented 'query' property (this example doesn't works), second specifying parameter(s) directly in the 'url' (this works).

@UtechtDustin please don't close the issue as “Completed” immediately after reminder. This is extremely discouraging.

utilmind avatar May 26 '24 20:05 utilmind

Just in case, here is the source code of PHP script which generating content for my example on https://live.bootstrap-table.com/code/utilmind/17717

<?php

if (isset($_GET['required-parameter'])) {
    $out = [
        [
            'id' => 1,
            'name' => 'name1',
            'price' => 123.45,
        ],
        [
            'id' => 2,
            'name' => 'name2',
            'price' => 543.21,
        ],
    ];

}else {
    $out = [];
}

// No cache
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.date('r'));
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('X-Robots-Tag: noindex, nofollow, noarchive');
// Allow at least live.bootstrap-table.com
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');
// Output JSON
header('Content-type: application/json');
exit(json_encode($out, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

utilmind avatar May 26 '24 20:05 utilmind

As I mentioned in my top comment, I'm not contributing the fix for this issue because a workaround with ?parameters= in the url works pretty well for me, although this is obviously wrong that query is ignored in the refresh method and could be issue for someone else.

utilmind avatar May 26 '24 20:05 utilmind

Sorry, my bad. I don't know that the close button marks it as completed or that there is a close option without out the completed part.

UtechtDustin avatar May 26 '24 21:05 UtechtDustin

The query option of the refresh method is internally almost the same as the queryparams table option. Which means you have to define the query as Object, as documented on both options. Bildschirmfoto 2024-05-26 um 23 56 23

Working demo: https://live.bootstrap-table.com/code/UtechtDustin/17720

UtechtDustin avatar May 26 '24 21:05 UtechtDustin

@UtechtDustin Okay, yes, my bad I specified the query incorrectly in my example, but it was correct in my real app.

Here is another example: https://live.bootstrap-table.com/code/utilmind/17722 It uses your fix + little improvement, "refresh" button in toolbar.

  1. Try to load data with the first, [Refresh using 'query'] button. Then try to reload data with "refresh" button at the top-right side of table. This will not work. Data specified in query will not be preserved, it will not be used for native refresh.
  2. However, if you load the data using only URL, with the second button, URL will be used upon native refresh. (Click second button, then reload data with "refresh" button at the top-right — second case works.)

utilmind avatar May 26 '24 22:05 utilmind

You're right! if a url is passed to the refresh method the url will be set as new "base"-url, which means if we have a url with parameters the parameters are also the new default value. If we pass the query they are only used for the next request. https://github.com/wenzhixin/bootstrap-table/blob/develop/src/bootstrap-table.js#L3094-L3106

That should be an easy fix, as soon we get a query object we have to add/merge it to our base url.

UtechtDustin avatar May 27 '24 07:05 UtechtDustin

Should be fixed by #7353. Working example with the fix: https://live.bootstrap-table.com/code/UtechtDustin/17731

UtechtDustin avatar May 27 '24 19:05 UtechtDustin