我有一個用Jersey(restful web service)製作的API,非常簡單。我已經能夠通過我的android應用程序提出請求/答案。Ajax請求每次通過錯誤(在服務器端球衣/ java restful WS中沒有回答JSONP?)
現在我正在開發Web後端以管理數據。問題是,當我用ajax進行調用時,每次答案都會通過「錯誤」部分。
看起來很奇怪,看上去螢火蟲的呼叫/回答似乎是正確的,最終200 OK的答案和正確的JSON數據。
的JavaScript代碼如下:
$(document).ready(function(){
var theUrl = "***url****/Rest/provincias";
jQuery.ajax({
beforeSend: function(req) {
req.setRequestHeader("Accept", "application/json");
},
cache: false,
async: false,
crossDomain: true,
type: "GET",
url: theUrl,
dataType: "jsonp",
jsonp: false,
contentType: "application/json; charset=utf-8",
statusCode: {
200: function (data){
//OK ANSWER
alert("Answer OK: " + data.response);
}
},
error: function (xhr,err) {
alert("Otra vez en error... " + xhr + "' '" + err);
},
success: function (data){
//Comprobamos en el json si tenemos true o false.
alert("éxito!! " + data);
},
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
alert("errorrr");
}
else {
var data = xhr.responseText;
alert("Info en complete: " + data);
}
}
});
});
當我提出通過瀏覽器調用類似於此寫入的JSON文本:
{
"response": true,
"data_int": 0,
"data_boolean": false,
"data_float": 0.0,
"data_double": 0.0,
"data_byte": 0,
"data_short": 0,
"data_long": 0,
"data_char": "\u0000",
"object": [
{
"id": 1,
"nombreCas": "Ãlava",
"nombreEus": "Araba",
"localizacion": {
"id": 46,
"latitude": "42.847511",
"longitude": "-2.679730"
},
"pueblos": {
"1": {
"id": 1,
"nombreCas": "AlegrÃa",
"nombreEus": "Dulantzi",
"provincia": null,
"localizacion": {
"id": 1,
"latitude": "42.841171",
"longitude": "-2.512608"
},
"barrios": {}
},
........
正如我已經能夠閱讀,錯誤可能是因爲答案不是JSONP格式(寧靜的WS正在回答JSON格式的文本),所以行數據類型:「jsonp」不能被刪除。如果我刪除它,答案不正確。
有什麼東西可以添加到我的網絡服務?例如,如何添加JSONP支持此代碼:提前
package main.java.webService;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import main.java.model.AccessManager;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import main.java.dto.Provincia;
import main.java.dto.ReturningClass;
/**
* @author Jon_Inazio
*
*/
@Path("provincias")
public class PueblosProvinciasService {
@GET
@Produces("application/json")
public String getProvincias(){
String provincias = null;
HashMap<Integer, Provincia> provinciasList = new HashMap<Integer, Provincia>();
try{
provinciasList = new AccessManager().getProvincias();
GsonBuilder gb = new GsonBuilder().serializeNulls().setPrettyPrinting();
Gson gson = gb.create();
Collection<Provincia> arrayProvs = new ArrayList<Provincia>();
arrayProvs = provinciasList.values();
/*
* CONVERTIR HASH MAP A UNA LISTA --> JSON LO PIDE ASI
*/
//ReturningClass<HashMap<Integer, Provincia>> ret = new ReturningClass<HashMap<Integer, Provincia>>(true, provinciasList);
ReturningClass<Collection<Provincia>> ret = new ReturningClass<Collection<Provincia>>(true, arrayProvs);
System.out.println("**Se han consultado las provincias!!");
provincias = gson.toJson(ret);
}catch(Exception e){
e.printStackTrace();
}
return provincias;
}
}
感謝,並希望大家能理解我:)。
您的回答是'JSON'不是jsonp,請回復jsonp。 – Musa
我想你錯過了URL中的回調佔位符。請看看http://stackoverflow.com/questions/4942004/jsonp-callback-problem例如 – Jk1
感謝您的意見!我已經能夠訪問我的Json數據:)。我需要對我的Web服務進行一些更改:http://nhachicha.wordpress.com/2012/08/05/using-jsonp-with-jax-rs/ – russellhoff