Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX跨域JSON不与ie配合使用_Javascript_Ajax_Json - Fatal编程技术网

Javascript 使用AJAX跨域JSON不与ie配合使用

Javascript 使用AJAX跨域JSON不与ie配合使用,javascript,ajax,json,Javascript,Ajax,Json,我使用的是Ajax,使用JSON进行跨域调用,脚本在FF中运行良好,但在ie中,脚本不会用结果填充选择菜单,在ie中,它会显示错误,因此我知道脚本肯定在工作并进行跨域调用,有人能告诉我我做错了什么吗 function xss_ajax(url) { var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribu

我使用的是Ajax,使用JSON进行跨域调用,脚本在FF中运行良好,但在ie中,脚本不会用结果填充
选择菜单
,在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);

}
函数xss_ajax(url){
var script=document.createElement('script');
setAttribute('type','text/javascript');
script.setAttribute('src',url);
setAttribute('id','script_id');
script_id=document.getElementById('script_id');
如果(脚本id){
document.getElementsByTagName('head')[0].removeChild(脚本id);
}
document.getElementsByTagName('head')[0].appendChild(脚本);
document.getElementById(“addrlist”).innerHTML=“”;
document.getElementById(“errlog”).innerHTML=“”;
}
函数回调(数据){
if(数据类型['error']!=“未定义”){
如果(窗口打开错误){
关于_错误();
}
if(document.getElementById(“errlog”)){
document.getElementById(“errlog”).innerHTML=“
”+数据['error']+”
”; }否则{ 警报(数据['error']); } }否则{ var val=data['address1']+”、“+data['address2']+”、“+data['address3']+”、“+data['address4']+”、“+data['postcode'”; document.getElementById(“addrlist”).innerHTML+=“”+val+“”; } } 函数searchpost(){ 风险值许可='98798797'; 变量url=”http://mydomin.co.uk/myfile.php?postcode=“+escape(document.getElementById(“field1”).value)+'&license='+escape(license); xss_ajax(url); }
您应该使用该库使事情变得更简单:

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是一个对象

此外,我删除了所有的错误检查,因为它根本不是必需的


p、 我添加了
callback=?
以使其成为JSONPajax请求,因为JSONP是用于跨域ajax的。

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

var opt = document.createElement('OPTION');
opt.text = val;
opt.value = val;
document.getElementById("addrlist").options.add(opt);

请求JSON文件还是JS文件?@MihaiIorga:实际上是一个JSONP请求,所以是代码在头部添加了一个脚本标记。@K.K:两者都有。这是一个JSONP调用,所以它被JSON包装在
callback(…)
中,使其成为一个Javscript文件。在他的代码中,但当我以jQuery方式执行时,我需要添加它。这不是一个普通的ajax请求。