I am making a form using UiComponent. In options.js, I would like to make an ajax call. However It's getting 404 not found error. I would like to know how we can get the right url. In the form:
<field name="attribute_id"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Vendor\Module\Model\Source\Myvalues</item> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="label" translate="true" xsi:type="string">Attribute</item> <item name="component" xsi:type="string">Vendor_Module/js/form/element/options</item> <item name="formElement" xsi:type="string">select</item> <item name="sortOrder" xsi:type="number">210</item> </item> </argument> </field>
In options.js
define([
'jquery',
'underscore',
'uiRegistry',
'Magento_Ui/js/form/element/select',
'Magento_Ui/js/modal/modal',
'mage/url'
], function ($, _, uiRegistry, select, modal, url) {
'use strict';
return select.extend({
/**
* On value change handler.
*
* @param {String} value
*/
onUpdate: function (value) {
console.log('Selected Value: ' + value);
var field1 = uiRegistry.get('index = field1');
var field2 = uiRegistry.get('index = field2');
field2.hide();
var field3Depend1 = uiRegistry.get('index = field3Depend1');
console.log(field2.visibleValue);
var linkUrl = url.build('customajax');
console.log('linkurl='+linkUrl);
//var name = document.getElementsByName("product[name]")[0].value;
// var type = document.getElementsByName("product[product_category_type]")[0].value;
$.ajax({
url: 'BASEURL????'+linkUrl,
showLoader: true,
data: {form_key: window.FORM_KEY, 'value':value},
type: "POST",
dataType : 'json',
success: function(result){
alert(result);
}
});
return this._super();
},
});
});
Hi @tvgarden
This is a very common problem and there is no perfect way to solve it. I have tried multiple ways like add a static block via layout, adding a html content in UI component, etc.
The final and stable solution which I am currently using is injection the dynamic content via Meta Data in DataProvoider. You can find my answer here: https://stackoverflow.com/a/57431164/5962966
Hope it helps!