【发布时间】:2016-11-02 11:36:15
【问题描述】:
我有以下设置:
两个本地域 192.168.30.1 -> 带有 JSON 数据的 Web 服务器和 169.254.168.105:3000,我想在其中处理数据。
网络服务器通过 php 显示数据,您必须经过身份验证才能查看数据。所以网址看起来像这样:“http://192.168.30.1/rest/activity14?auth_username=username&auth_password=password”
如果我在浏览器中输入,则会得到以下输出:
{
people: [
{
id: "58107d10ad910",
name: "name"
}
],
documents: [
{
document_id: "5811f9b306216",
name: "document1"
}
]
}
我需要在另一个域上使用它。所以我尝试通过 jQuery ajax 获取数据,但似乎无论如何我都无法得到它。我尝试了以下 ajax 调用:
$.ajax({
type: "GET",
url: $url,
dataType: 'json',
success: function(data) {
console.log("success" );
},
error: function(e) {
console.log("Error: " + e);
}
});
这会导致控制台出错(“错误:[object Object]”)。
所以我尝试了不同的方法。我试过getJSON:
$.getJSON( $url, function(data) {
console.log("success");
}).error(function(e) {
console.log(e);
});
它甚至没有给出错误消息。
我还阅读了有关 jsonp 并将其用于跨域 json 调用的信息。下面的做法
function logResults(json) {
console.log("json" + json);
}
$.ajax({
url: $url + "callback=logResults?",
dataType: "jsonp",
jsonpCallback: "logResults",
error: function(e) {
console.log("Error: " + e);
}
});
这也不起作用。在 deloper 工具网络选项卡中,我发现以下有关 jsonp 调用的信息(状态:已取消):
General:
Request URL:http://192.168.30.1/rest/activity14? auth_username=kusername&auth_password=password&callback=logResults?&callback=logResults&_=1478083606031
Request Headers:
Provisional headers are shown
Referer:http://169.254.168.105:3000/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Query String Parameters:
auth_username:username
auth_password:password
callback:logResults?
callback:logResults
_:1478083606031
我无法真正解释这一点,但也许它有助于找到我的问题。
对于我的具体情况,正确的方法是什么?如果我已经走在正确的道路上,我到底做错了什么?
编辑:
这是正常 JSON 请求(不是 jsonp 请求)在 DevTools 网络选项卡中的输出:
General:
Request URL:https://rippleapi.herokuapp.com/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//192.168.33.10/rest/activity14%3Fauth_username%3Dusername%26auth_password%3Dpassword
Request Headers:
Provisional headers are shown
Access-Control-Request-Headers:x-ripple-user-agent
Access-Control-Request-Method:GET
Origin:http://169.254.168.105:3000
Referer:http://169.254.168.105:3000/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Query String Parameters:
tinyhippos_apikey:ABC
tinyhippos_rurl:http://192.168.33.10/rest/activity14?auth_username=username&auth_password=password
【问题讨论】:
-
getJSON版本不会出错,因为 error 的承诺版本是fail方法,而不是error。另外,尝试console.loge本身,而不是将其连接到"Error: "。我的意思是像console.log("Error", e)这样的东西会这样做。然后您可以在控制台中检查错误对象并更好地了解发生了什么。 -
@kk_,您说当您使用
AJAX的第一种方法时,您会得到Error: [object Object]。这意味着您的响应继续错误回调。那么很可能意味着服务器端代码有问题。 -
@ZoltánTamási 我更改了错误 console.log 并且输出是“Object {readyState: 0, responseText: "", status: 0, statusText: "error"}" 这并没有真正的帮助对吗?
-
@ZoltánTamási 你的意思是我应该在浏览器中使用“运行 PHP 脚本”输入 url 吗?我这样做了,输出是我在问题中发布的 JSON 返回。
-
哦,我明白了,谢谢,没意识到。你检查
$url变量是否正确?
标签: javascript jquery json ajax