【发布时间】:2015-04-17 19:00:14
【问题描述】:
在我们的网站上,<body> 标签包含各种data-*="*" 属性:
<body data-someData="someValue" data-someOtherData="someOtherValue">
我需要在其他页面上获取这些属性的值。所以,我使用 jQuery AJAX $.get 来获取页面的 HTML,从而获取这些数据属性。
我当前的脚本:
// The call (used on different pages)
var stock = getProductData('stock', '/some/product/url');
// The "GET" function
function getProductData(type, url) {
var jqxhr = $.get(url, function( data ) {
console.log('Data found!');
var $body = $(data).find('body');
var val = $body.data('stock');
console.log('Returning Value: "' + val + '"');
return val;
}).done(function(){
// Request is complete
console.log('getProductData Finished...');
}).fail(function(){
console.error( 'getProductData: ' + type + ' = FAIL / URL: ' + url);
});
}
那么,有什么问题吗?好吧,$(data).find('body').data('stock'); 将以undefined 的形式返回。我也试过$(data).find('body').attr('data-stock');,但它返回了同样的东西。
那么,如何使用$.get 返回body 标签的data-someData="someValue" 属性值?
上面示例中使用的data-stock 属性在我的产品页面上如下所示:
<body data-stock="3">
编辑: 不重复:这个问题专门指解析元素的特定属性。我不是在问如何使用 AJAX 返回数据。
【问题讨论】:
-
你为什么要把这些放在
body? -
我同意@DigitalChris,提出一个下载一堆 HTML 只是为了获得两个属性的请求是非常浪费的。为什么不创建一个单独的端点,将属性作为 JSON 返回?
-
那么,你得到
Returning Value: undefined?如果是这种情况,那么您可能找不到正确的元素。 jQuery 通过构建集合去除了一些元素,body可能就是其中之一。请注意,无论如何您都不能像这样从getProductData返回val。 -
你不能像这样用 jQuery 创建一个 body 元素,即
$("<body>")返回一个空集合。您可能需要以不同的方式处理此问题。
标签: jquery ajax attributes jquery-data jquery-get