根据响应的国家设置不同的价格



我试图做一个onchange事件与ajax和php根据国家选择从下拉菜单。我的问题是响应设置了数组中每个项目的最后价格,我找不到解决这个问题的方法。下面是我到目前为止的代码:

$("#field-organization-country-iso").on('change', (e) => {
e.preventDefault();
e.stopPropagation();
const CountryIso = $('#field-organization-country-iso').val();
Request.get(`/myrequested_file`, {
data: { CountryIso },
})
.done((response) => {
for (let i = 0; i < response.data.itemPrice.length; i++) {
const price = response.data.itemPrice[i];
$('.checkout-table tr').find('.hide-if-odd-or-sub').eq(i).html(price);
}
});
});

和php-function:

public function change_currencyIso(Request $request, $summaryService): JSONResponse
{
$countryIso = $request->query->get('CountryIso');
$response = new JSONResponse();
$orderSummary = $summaryService->Summary(Cart::getCurrentCart(), User::currentUserOrNull(), $countryIso, null, null);
$items = $orderSummary->getItems();
$currencies = new ISOCurrencies();
$numberFormatter = new NumberFormatter(Environ::getLocale(), NumberFormatter::CURRENCY);
$moneyFormatter = new IntlMoneyFormatter($numberFormatter, $currencies);
$prices = [];
foreach ($items as $item) {
$price = $moneyFormatter->format($item->getLocalPrice());
$prices[] = $price;
}
$response->setVar('itemPrice', $prices);
return $response;
}

$prices返回带有项目价格的数组,但我知道响应在它上面写。我可以循环遍历数组并将响应添加到每个价格吗?我对'itemPrice'的响应只返回一个现有的价格。

{itemPrice: Array(2)}
itemPrice: Array(2)
0: "245,00 US$"
1: "32,90 US$"
length: 2

现在itemPrice返回数组,但仍然将所有内容放在同一行。每个都试过了,但都没用。

您应该添加更多关于html结构的细节,但是我假设您有一个表,每个项目有一行,并且包含价格的单元格具有类"hide-if-odd-or-sub"。此外,表的行顺序与服务器返回的价格顺序相同。因此,您必须将每个价格分配到相应的表行:

foreach (var i in response.data.itemPrice) {
var price = response.data.itemPrice[i];
$('.checkout-table tr').eq(i).find('.hide-if-odd-or-sub').html(price);
}

这不是很健壮,因为如果用户在另一个浏览器的选项卡中更改了购物车中的商品,并返回到前一个选项卡并更新了国家,那么服务器返回的价格将不对应于表中的商品,但是它应该在正常使用下工作。

最新更新