2013-10-08 99 views
6

我在本地嘗試讓JSONP給我一個正確的響應,並將其傳入我的回調函數jsonp_callback。從使用代碼:How do I set up JSONP?正確的JSONP響應

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).')'; 

$.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我得到它看起來像一個響應:

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

Testing a static jsonp response望着第一個答案我想我正確地做,但我不知道爲什麼jQuery給了我一個獨特的字符串。

我該如何讓我的回覆看起來像這樣?

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

是否有可能您的響應是字符串而不是JSON對象?你能檢查它嗎? – JoeFletch

+0

成功函數返回對象 – invad0r

+0

對不起,我錯讀了你的初始文章。我現在看到它。我對設置'jsonp'屬性並不熟悉,但是您是否在'success'屬性中嘗試了以下內容? '成功:function(r){jsonp_callback(r); }' – JoeFletch

回答

-1

像這樣:

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

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

在你的代碼從來沒有實際使用您定義的jsonp_callback功能。你只是寫了一些匿名成功回調。 jQuery注意到你使用了一個匿名函數,這就是爲什麼它會生成這個隨機名稱,以便它可以調用匿名回調函數。

+0

是的,進入函數jsonp_callback。 頭中的響應仍然看起來像'jQuery11020983548907097429_1381238805774({「a」:1,「b」:2,「c」:3,「d」:4,「e」:5})' – invad0r

1

這裏是我的代碼片段。如果能解決你的問題..

客戶端代碼:

集jsonpCallBack: '照片' 和數據類型: '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); 
     }; 

服務器端代碼(使用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 
}