【问题标题】:Javascript loads on page load not after selection is madeJavascript 在页面加载时加载而不是在选择之后加载
【发布时间】:2014-02-13 15:38:36
【问题描述】:

我有一个页面,用户可以上传产品照片,他从品牌选择框中选择品牌,该品牌将使用属于该品牌的产品填充产品选择框。

这一切都适用于冷融合,但随着我们添加更多产品,它变得更慢,我已经使用 JSON 格式将产品放在另一个页面上。如果我转到该页面 - prod-json.cfm?brand_id=115,它将正确加载所有信息。问题是我需要它显示在照片页面上,当用户选择特定品牌时,下面是我用来调用产品页面的代码:

<script type="text/javascript">
// JavaScript Document

// The queryToObject function
var queryToObject = function(q) {
var col, i, r, _i, _len, _ref, _ref2, _results;
_results = [];
for (i = 0, _ref = q.ROWCOUNT; 0 <= _ref ? i < _ref : i > _ref; 0 <= _ref ? i++ : i--) {
  r = {};
  _ref2 = q.COLUMNS;
  for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
    col = _ref2[_i];
    r[col.toLowerCase()] = q.DATA[col][i];
  }
  _results.push(r);
}
return _results;
};

// Read the products
$.ajax({
  type: "POST",
url: "prod-json.cfm",
data: {'brand_id': $("##brand_id").val()},
dataType: "json",
success: function(data) {
  var row, sData, _len, _i;
  // Run the data thru queryToObject
  data = queryToObject(data);
  // Convert the object to a string to display it
  sData = JSON.stringify(data);

  // Print all products
  $('##product_id').append('');
  // Loop over the query
  for (_i = 0, _len = data.length; _i < _len; _i++) {
    row = data[_i];
    $('.multiple').append('<option value=' + row.product_id + ' class="' + row.brand_id + '">' +   row.product_title + ' - ' + row.make_title + ' ' + row.model_title + '');
 }
 }
 });
 </script>

如果我用选定的特定品牌刷新页面,那么它将显示产品,但如果我选择另一个品牌,则它不会加载任何内容,请有人帮我解决这个问题。

提前致谢。

【问题讨论】:

  • 您在选择第二个品牌时是否从 AJAX 调用中得到任何结果?您的浏览器控制台中有任何内容吗? JavaScript 中的 ## 是因为 ColdFusion 正在呈现此脚本吗?
  • 是的##是因为它的coldfusion,当我选择了另一个品牌时没有反应,它只显示产品如果我选择品牌选择框然后重新加载页面,那就是唯一有效的时候。
  • 你能在 JSFiddle 上发布一些东西吗?当您说没有响应时,这是否意味着它没有发出请求,或者 ColdFusion 没有返回任何内容。
  • 如果我在 google chrome 中对其进行测试,它不会在控制台中说明有关该功能的任何内容,它只是说明了我在页面上拥有的另一个插件的一些内容。基本上必须发生的是,一旦用户选择了品牌,则必须将品牌 id 传递给 prod-json.cfm,然后根据已选择的 id 生成结果。在未选择品牌并且我选择某些东西时,在初始页面加载时,什么都没有发生,我希望这是有道理的,如果我把它放在网上而不是 jsfiddle,那会更好吗?
  • 这听起来像是一个 JavaScript 问题,所以 jsFiddle 会很棒。

标签: jquery json coldfusion


【解决方案1】:

我认为正在发生的事情是您没有任何东西在监听要更改的下拉菜单。

您可以通过多种方式解决此问题。最简单的方法是将整个 AJAX 调用包装在另一个函数中......类似于:

function loadData() {
     $.ajax({
  type: "POST", .......
}

然后将代码的顶部更改为:

$(function(){

    $('.styled').customSelect();

    $('#brand_id').change(function() {
        loadData();
    });
    loadData(); // this triggers the initial load for the default value.  might not be necessary
});

【讨论】:

  • 嗨,Brian,感谢您查看代码,我在 jsfiddle 中发布的 javascript 实际上是 3 个单独的脚本,我必须将它们粘贴为一个,以上内容仍然适用吗?
  • 由于跨域问题,我无法直接测试它,但在您的环境中测试应该不会花很长时间
  • 我真的很抱歉问你这个问题,因为我在 js 中一无所知,但是我将如何将你的代码实现到我在顶部提交的代码中呢?
  • 我刚刚开始工作,非常感谢,您的解决方案对我帮助很大,我很感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多