我有以下代码:
var statusCheckUrl = "https://www.mydomain.com/webchat/live?action=avail";
$.ajax({
crossDomain: true,
dataType: "script",
url: statusCheckUrl,
success: function(result) {
console.log("result is: "+result);
eval(result);
},
error: function (jqXHR, textStatus, msg) {
unavailable();
},
timeout: 2000,
cache: false
});
如果我在浏览器中访问了网址:https://www.mydomain.com/webchat/live?action=avail,则响应如下:var isAvailable = true;
但是,我的console.log
正在打印undefined
,这显然无法按预期运行。
我从localhost运行此代码,但认为crossDomain:true会克服任何跨域问题?
我如何解决这个问题,为什么它在我的成功函数中返回未定义?
编辑:我已经尝试过以下人员对eval的建议,但似乎结果值总是未定义,无论如何。为什么我因为这个ajax调用而未定义?
答案 0 :(得分:1)
问题不在AJAX调用中,而是eval
在其自己的范围内运行。下载脚本中的var
关键字正在设置本地变量,该变量很快超出范围。相反,您想要设置一个全局变量(删除var
关键字)。
另请参阅:Using eval() to set global variables
旁注:不要执行您不需要的代码,尤其是动态和跨域。如果您想要做的只是获取一个值 - 在这种情况下,如果有可用的东西 - 只需返回值。 (如果您无法控制脚本,但它总是看起来一样,您可以随时将其解析为字符串。您可能希望编写一个以某个间隔运行的脚本来检查并提醒您其中的任何更改但是,响应格式。)
答案 1 :(得分:1)
跨域请求的最佳实践是在服务器端框架(.net,php)中发出请求,解析信息并获取所需内容,然后使用您自己的响应(json,text,whatever)返回页。
作为@Ic。说,你不应该执行代码。那里有很好的安全风险。