0

我有我们网站 www.phmotorcycles.co.uk/parts/brakes.html 的生产和测试环境。在页面的右侧有一组过滤器控件。现在在测试环境中,这可以完美运行。

在页面加载时调用从数据库返回 JSON 响应的 ASP 页面:

[{"value":"ktm"}]

函数调用如下:

function loadFilters(p,l,c) {
$.post('../supportScripts/productFilters.asp',{
    level: l,
    productManufacturer: $("#partMan").val(),
    productGroup: p,
    bikeModel: $("#partBM").val(),
    modelYear: $("#partMY").val(),
    ajax: 'false'}, function(data) {

        var sel = $("#" + c);
        var s = jQuery.parseJSON(data);
        sel.empty();
        sel.append('<option value=\'0\'>Please Select</option>');
        for (var i=0; i<s.length; i++) {
            sel.append('<option value="' + s[i].value + '">' + s[i].value.toUpperCase() + '</option>');
        }
    });
}

我遇到的问题是在 for 循环中,因为 firefox 报告 s 为空。

我已经比较了两种环境中的所有代码,它们与数据库上的存储过程相同。

这个问题困扰了我一段时间,我什至通过 fiddler 运行它,请求标头和响应是相同的,直到它在实时服务器上中断。

有人对我如何解决这个问题有任何建议吗?

4

1 回答 1

0

你不需要使用jQuery.parseJSON. 您的服务器正在返回Content-type: application/json,因此 jQuery 正在为您解析它。它使用Content-type“智能猜测”您的 AJAX 调用的返回类型。

应该做的是将第四个参数传递给$.post, 'json'。这告诉 jQuery 你期待 JSON,即使Content-type错误也会为你解析它。

function loadFilters(p,l,c) {
    $.post('../supportScripts/productFilters.asp',{
        level: l,
        productManufacturer: $("#partMan").val(),
        productGroup: p,
        bikeModel: $("#partBM").val(),
        modelYear: $("#partMY").val(),
        ajax: 'false'
    }, function(data) {
        var sel = $("#" + c);
        sel.empty();
        sel.append('<option value="0">Please Select</option>');
        for (var i=0; i < data.length; i++) {
            sel.append('<option value="' + data[i].value + '">' + data[i].value.toUpperCase() + '</option>');
        }
    }, 'json');
}
于 2013-04-25T15:18:10.593 回答