Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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/运行Ajax函数_Javascript_Ajax - Fatal编程技术网

Javascript 将变量传递给Ajax/运行Ajax函数

Javascript 将变量传递给Ajax/运行Ajax函数,javascript,ajax,Javascript,Ajax,我创建了一个谷歌浏览器扩展。我遇到的问题是Ajax函数总是返回未定义的。如果ajax不在函数中,那么它将成功运行-但是这将是运行的第一件事,因此它无法读取返回的URL(从函数URL) 如何修复此问题,使Ajax函数callAjax能够读入mainurl并运行,以便XML文档可以显示在文本框中 document.addEventListener('DOMContentLoaded',函数(){ document.getElementById('Submit')。addEventListener(

我创建了一个谷歌浏览器扩展。我遇到的问题是Ajax函数总是返回未定义的。如果ajax不在函数中,那么它将成功运行-但是这将是运行的第一件事,因此它无法读取返回的URL(从
函数URL

如何修复此问题,使Ajax函数
callAjax
能够读入
mainurl
并运行,以便XML文档可以显示在文本框中

document.addEventListener('DOMContentLoaded',函数(){
document.getElementById('Submit')。addEventListener('click',begin');
});
var mainURL;
函数begin(){
mainURL=url();
callAjax();
}
函数url(){
返回“https://www.mapquestapi.com/directions/v2/route?key=9vyfTMs7Q4JVtr4u5ItN8Fd0YHuw1dqn&from=Denver%2C+CO&to=Boulder%2C+CO&outFormat=xml&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&EnhancedArractive=false&avoidTimedConditions=false”;
}
函数callAjax(){
$.ajax({
键入:“获取”,
url:mainURL,
数据类型:“XML”,
成功:解析XML,
错误:功能(请求、状态、错误){
警报(request.responseText);//警报未定义
}
});
}
//此方法不会被调用,总是失败。
函数解析xml(xml){
document.getElementById(“xmlSource”).textContent=new XMLSerializer().serializeToString(xml);
document.getElementById(“xmlSource”).textContent=new XMLSerializer().serializeToString(xml.documentElement);
var ballList=$('distance',xml).get();
$。每个(球表、函数(索引、值){
console.log(index+“:”+value.textContent);
$(“#r#u距离”).append(value.textContent);
返回false;
});
}


https://stackoverflow.com/posts/52372845/edit#
当我运行您提供的代码段时,控制台中出现了一个cors错误

这是服务器端强制执行的安全措施,旨在防止对服务器的恶意调用

一个简单的例子(如果可能的话):您可以创建一个虚拟网站,其中包含一个javascript片段,可以调用facebook,以便执行一个仅对登录用户可用的操作。如果有人登录到他们的facebook帐户访问该网站,则该请求可能会成功执行,从而允许您使用他们的帐户执行任何操作

这就是为什么如果服务器没有提供明确允许此类调用的头,浏览器会阻止请求


TLDR:这是一种在服务器端强制执行的安全措施,如果服务器不接受来自其他地方托管的网页的请求,那么您对此无能为力

在我的问题中,我不知道样本产生了CORS错误(看到我在chrome扩展中使用的URL没有创建此错误)

ajax函数之所以一直返回未定义的
,是因为我使用了启动主函数的EventListener

document.addEventListener('DOMContentLoaded', function () {
      document.getElementById('Submit').addEventListener('click',begin);      
});
我不明白为什么这个函数会导致错误,但我不得不将其更改为单击Jquery函数

 $(document).ready(function(){
    $("#Submit").click(function(event){
        begin();
        event.preventDefault(); //
    });
});

我猜你有一个CORS错误。。。。你看过你的控制台了吗?不确定调用error时为什么会有responseText。consolejquery.min.js中存在0个错误:4跨源读取阻止(CORB)使用MIME类型text/xml阻止跨源响应。有关详细信息,请参阅。@ricardofagodoy谢谢。我不确定为什么它没有通过chrome扩展生成这个错误,但这很可能是它不工作的原因。