当 AJAX 调用在本地主机上正常工作时,什么可能会阻止 AJAX 调用在主机服务器上工作?我尝试从 AJAX 调用返回一个错误,但我得到的只是“未定义”。我认为没有调用实际的页面方法,因为我的日志中没有添加任何信息(并且我已经明确添加了一个调用)。我无法在本地机器上重现该问题,所以有人知道我应该研究的可能区域吗?
谢谢
当 AJAX 调用在本地主机上正常工作时,什么可能会阻止 AJAX 调用在主机服务器上工作?我尝试从 AJAX 调用返回一个错误,但我得到的只是“未定义”。我认为没有调用实际的页面方法,因为我的日志中没有添加任何信息(并且我已经明确添加了一个调用)。我无法在本地机器上重现该问题,所以有人知道我应该研究的可能区域吗?
谢谢
你的浏览器中有什么 URL,你的 Ajax 调用是什么 URL?浏览器具有不允许跨域 AJAX 调用的“安全”约束。例如,如果我正在加载本地文件:
http://localhost:20080/myCustomPage.html
在该页面中,我进行了 ajax 调用
http://search.twitter.com/search?q=test
我会从浏览器收到安全警告。根据您的浏览器,这可能会在底角 (IE) 中显示一个警告图标,或者在 javascript 日志 (firefox) 中显示一个错误。
在一个特定的情况下,有一种方法可以解决这个问题。这种情况是任何 GET 请求。要做到这一点而不是进行“ajax”调用,您需要包含一个标签。然后将读取并加载该脚本标签。这里的问题是调用现在需要包含一个“回调”方法,您可以在自己身边实现该方法,该方法会在调用结果中被调用。
因此,而不是像这样的回应:
{
"first_name": "peter",
"last_name": "parker"
}
你需要返回
myCallBackFunction({
"first_name": "peter",
"last_name": "parker"
});
此示例使用 JSON,但只要调用该函数,您就可以轻松使用 XML、HTML 或任何其他结果格式。
myCallbackFunction("INSERT RESPONSE TEXT HERE")
这种方法通常被称为JSONP,幸运的是,从客户端的角度来看,它在 jquery 等常见的 javascript 库中实现。如果您控制服务器端,则需要硬编码 callBackFunction 包装器,或公开允许客户端设置它的参数。不幸的是,如果您不拥有该库,除非该服务的所有者已经提供了该功能,否则您将无能为力。幸运的是,大多数 Web 2.0 服务都已经实现了该功能。