2013-10-08 7 views
6

Sto provando localmente per ottenere JSONP per darmi una risposta corretta e passarla nella mia funzione di callback jsonp_callback. Utilizzando il codice da: How do I set up JSONP?corretto JSONP Response

header('content-type: application/json; charset=utf-8'); 
$data = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo $_GET['jsonpCallback'] . '('.json_encode($data).')'; 

e

$.ajax({ 
    url: 'jsonp-response.php', 
    dataType:'jsonp', 
    jsonp: 'jsonp_callback', 
    success: function (r){ 
     console.log(r); 
    } 
}); 


function jsonp_callback (r){ 
    console.log('jsonp_callback:',r); 
} 

Sofar sto ricevendo una risposta che assomiglia a:

jQuery1102035954900085926056_1381230228656({"a":1,"b":2,"c":3,"d":4,"e":5}) 

Guardando la prima risposta da Testing a static jsonp response penso di essere farlo correttamente ma non sono sicuro del motivo per cui jQuery mi dà una stringa univoca.

Come rendere la mia risposta simile a questa?

jsonp_callback({"a":1,"b":2,"c":3,"d":4,"e":5}) 
+0

È possibile che la risposta sia una stringa anziché un oggetto JSON? Puoi controllarlo? – JoeFletch

+0

la funzione successe restituisce un oggetto – invad0r

+0

Spiacente, ho letto male il tuo post iniziale. Ora lo vedo. Non ho familiarità con l'impostazione della proprietà 'jsonp', ma hai provato quanto segue nella proprietà' success'? 'success: function (r) {jsonp_callback (r); } ' – JoeFletch

risposta

-1

Ti piace questa:

$.ajax({ 
    url: 'jsonp-response.php', 
    dataType:'jsonp', 
    jsonp: 'jsonp_callback', 
    success: jsonp_callback 
}); 

function jsonp_callback (r) { 
    console.log('jsonp_callback:',r); 
} 

Nel codice non avete mai effettivamente utilizzato la funzione jsonp_callback che si è definito. Hai semplicemente scritto un callback di successo anonimo. jQuery ha notato che hai usato una funzione anonima ed è per questo che ha generato questo nome casuale in modo che possa richiamare la richiamata anonima.

+0

Sì, passa alla funzione jsonp_callback. La risposta nell'intestazione sembra ancora 'jQuery11020983548907097429_1381238805774 ({" a ": 1," b ": 2," c ": 3," d ": 4," e ": 5})' – invad0r

1

Ecco i frammenti dal mio codice .. Se risolve i vostri problemi ..

Codice Cliente:

Set jsonpCallBack: 'foto' e dataType: 'jsonp'

$('document').ready(function() { 
      var pm_url = 'http://localhost:8080/diztal/rest/login/test_cor?sessionKey=4324234'; 
      $.ajax({ 
       crossDomain: true, 
       url: pm_url, 
       type: 'GET', 
       dataType: 'jsonp', 
       jsonpCallback: 'photos' 
      }); 
     }); 
     function photos (data) { 
      alert(data); 
      $("#twitter_followers").html(data.responseCode); 
     }; 

Server Side Code (Using Rest Easy)

@Path("/test_cor") 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String testCOR(@QueryParam("sessionKey") String sessionKey, @Context HttpServletRequest httpRequest) { 
    ResponseJSON<LoginResponse> resp = new ResponseJSON<LoginResponse>(); 
    resp.setResponseCode(sessionKey); 
    resp.setResponseText("Wrong Passcode"); 
    resp.setResponseTypeClass("Login"); 
    Gson gson = new Gson(); 
    return "photos("+gson.toJson(resp)+")"; // CHECK_THIS_LINE 
}