在我当前的项目中,我使用 Google Feed API 来获取 Feed 的混合 JSON/XML 数据。因为我想在将这些数据显示给用户之前在我的服务器上解析这些数据,所以我提出了以下概念。
客户端通过 AJAX 从 Google API 请求 JSON/XML 数据 -> 数据通过 AJAX 发布请求发送到我的服务器(xml_receiver.php 写入缓存文件)-> 服务器发回解析的 JSON 响应(json_sender.php 加载缓存文件) -> 客户端上的 jQuery 将所有数据放入 HTML 上下文中。
我拥有的代码就像一个魅力,但是当我想使用 FireBug 进行调试时,它一直告诉我对 xml_receiver.php 的 POST 请求以及对 json_sender.php 的 GET 请求失败。
这真的很奇怪,因为 xml_receiver 确实在接收数据,而 json_sender.php 正在发送正确的输出。(检查 100%!)
PS:我用“trs_id”缓存数据而不让 xml_receiver.php 打印 JSON 数据的原因是 POST 完成时 jQuery 似乎没有从 xml_receiver.php 加载响应。
这是我的jQuery代码:
// JSON Loader Client-Side
$.ajax({
url: 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&output=json_xml&q=%Here goes my RSS URL%',
success: function (data) {
console.log("JSON Data received, starting Transmission");
var xml = data.responseData.xmlString; // Get XMLString from JSON Data
var trs_id = makeid(); // Create a random ID that will be used for transmission
// Transmit received JSON to Server with data and ID
$.ajax({
type: 'POST',
async: false,
url: 'http://myserver.com:3333/feed_loader/xml_receiver.php',
data: {
trs_id: trs_id,
xml_data: xml
},
success: function () {
console.log("Transmission to server OK!");
},
error: function (error) {
console.log("Transmission to server Failed!");
console.log(error);
}
});
// Get cached and prepared Data back from Server
$.ajax({
dataType: 'jsonp',
url: 'http://myserver.com:3333/feed_loader/json_sender.php?trs_id='+trs_id,
success: function (data) {
console.log("Parsed JSON Data received!");
$(data).prependTo('#xml_content');
},
error: function (error) {
console.log("Receiving parsed Data Failed!");
console.log(error);
}
});
},
error: function (data) {
console.log("Error while loading JSON Data from Google Feed API");
data = JSON.stringify(data);
// Transmit received Error to server
$.ajax({
type: 'POST',
url: 'http://myserver.com:3333/feed_loader/error_receiver.php',
data: {
json_stream: data,
},
success: function (data) {
console.log("Error Data was transmitted to Server!");
}
});
},
dataType: 'jsonp'
});
});
这是 Firebug 在控制台窗口中放置的内容
JSON 数据收到,开始传输 feed_test.html (Zeile 13) POST http://"myserver":3333/feed_loader/xml_receiver.php 200 OK 49ms jquery....min.js (Zeile 5)
传输到服务器失败!feed_test.html (Zeile 32) Object { readyState= 0 , status= 0 , statusText= "[Exception... "Failure"...d :: line 5" data: no]" } feed_test.html (Zeile 33)
接收解析数据失败!feed_test.html (Zeile 47) 对象 { readyState=4, status=200, statusText="success"}