0

我正在使用 Ajax 确实使用 JSON 进行跨域调用,并且脚本在 FF 中运行良好,但在 ie 中,脚本不会填充select menu结果,在 ie 中它会显示错误,所以我知道脚本肯定在工作并进行跨域打电话,谁能告诉我我做错了什么?

function xss_ajax(url) {

    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', url);
    script.setAttribute('id', 'script_id');

    script_id = document.getElementById('script_id');
    if (script_id) {
        document.getElementsByTagName('head')[0].removeChild(script_id);
    }


    document.getElementsByTagName('head')[0].appendChild(script);

    document.getElementById("addrlist").innerHTML = "";
    document.getElementById("errlog").innerHTML = "";
}

function callback(data) {

    if (typeof data['error'] != "undefined") {
        if (window.on_error) {
            on_error();
        }

        if (document.getElementById("errlog")) {
            document.getElementById("errlog").innerHTML = "<br>" + data['error'] + "<br>";
        } else {
            alert(data['error']);
        }

    } else {



        var val = data['address1'] + ", " + data['address2'] + ", " + data['address3'] + ", " + data['address4'] + ", " + data['postcode'];

        document.getElementById("addrlist").innerHTML += "<option value='" + val + "'>" + val + "</option>";

    }
}

function searchpost() {

    var license = '98798797';
    var url = "http://mydomin.co.uk/myfile.php?postcode=" + escape(document.getElementById("field1").value) + '&license=' + escape(license);

    xss_ajax(url);

}
4

2 回答 2

0

您应该使用jQuery库使事情变得更容易:

var license = '98798797';
var url = "http://mydomin.co.uk/myfile.php?postcode="+escape($("#field1").val())+'&license='+escape(license);

$.getJSON(url+'&callback=?', function(data) {
    var val = data.address1 + ", " + data.address2 + ", " + data.address3 + ", " + data.address4 + ", " + data.postcode;
    var opt = $('option').text(val).val(val);
    $("#addrlist").append(opt); 
});

看看你的代码现在有多短?

顺便说一句,您将 json 数据视为一个数组,它不是一个数组,所以不是(例如):data['address1']我将其更改为data.address1因为解析的 json 是一个对象。

此外,我删除了所有错误检查,因为它根本没有必要。

ps 我添加了callback=?它以使其成为JSONP ajax 请求,因为 jsonp 用于跨域 ajax。

于 2012-09-01T08:40:08.130 回答
0

我认为这是您将选项添加到选择的方式。创建一个新的 option 元素并添加到 select 元素中,而不是替换所有 HTML 内容:

var opt = document.createElement('OPTION');
opt.text = val;
opt.value = val;
document.getElementById("addrlist").options.add(opt);
于 2012-09-01T08:41:57.030 回答