我正在向我的服务器实现一些AJAX请求。请求类型和参数在两种情况下完全相同,但来自服务器的响应类型不同。
案例1 :
这是使用钛网络http客户端在Titanium中实现的。
var xhr = Ti.Network.createHTTPClient({
onload : function() {
alert('sucess');
},
onerror : function(e) {
alert('error');
},
timeout : 5000
});
var main_url = "http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876";
xhr.open('GET', main_url);
xhr.send();
完美地返回响应,似乎对我有用。
案例2 :
这是使用JQuery AJAX方法在本地文件中实现的。
var main_url = "http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876";
$.ajax({
url: main_url,
type: "GET",
dataType: "json",
timeout: 5000,
success: function(data, status, xmlstatus) {
alert("success");
},
error: function(data, status, xmlstatus){
if (t === "timeout") {
alert("timeout");
} else {
alert("some error");
}
}
});
但由于浏览器中的 CROSS DOMAIN政策,它会返回
XMLHttpRequest cannot load http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876. Origin null is not allowed by Access-Control-Allow-Origin.
所以,为了避免这种情况,我添加了另一个参数
&callback = ?
但它仍然会返回
alert('some error');
无法确定哪些内容出错了。 当URL,参数,类型一切都相同时。
--------------- EDIT -------------
向内挖掘让我感到欣慰:
console.log(data) => parsererror
和
console.log(xmlstatus) => jQuery164023596301255747676_1335786441349 was not called
答案 0 :(得分:1)
我认为你的服务器没有用jsonp回答,只是用json回答。
JSONP答案是这样的:
callback(someJson)
回调是您提供的回调的名称,或者是由jquery自动提供的回调的名称。您不能简单地在JSONP中调用为JSON查询而生成的服务器。
这是一个示例(有点复杂,它是真实的代码,但也许您会过滤与您的问题无关的内容):
客户:https://github.com/Canop/braldop/blob/master/chrome/braldop/inext_com.js
服务器:https://github.com/Canop/braldop/blob/master/go/src/braldopserver/BraldopServer.go
答案 1 :(得分:0)
正如您所说的“本地文件”一样,如果您使用协议文件加载文件,请注意不能在ajax中做很多事情://。即使服务器是localhost,也需要使用http://。