2014-04-11 54 views
0

這是我下面的JS代碼:無法獲得Ajax回調JSON數據時使用JSONP數據類型

function getTopProductsApi(){ 

var result; 

    $.ajax({ 
     url: API_url, 
     type: "get", 
     data: ({}), 
     async:false, 
     dataType: "jsonp", 
     jsonpCallback:"success_jsonpCallback", 
     success: function(rs){ 
      result = rs; 
     } 
    }); 
    return result ; 

} 


var result = getTopProductsApi(); 
alert(result); 

PHP

public function test(){ 

     echo $_GET['callback']. '(' . json_encode('213213') . ')'; 
} 

我相信,我得到的返回JSON數據: 的JSON我得到的數據如下:

success_jsonpCallback("213213") 

但是我沒有數據提醒。

有人能說出原因嗎?由於

+1

還有的另一個副本【如何返回從AJAX調用的響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an -ajax-call) – Quentin

回答

-1

試試下面的代碼:

function getTopProductsApi(){ 

var result; 

$.ajax({ 
    url: API_url, 
    type: "get", 
    data: ({}), 
    async:false, 
    dataType: "jsonp", 
    jsonpCallback:"success_jsonpCallback", 
    success: function(rs){ 
     result = rs; 
    } 
}); 


} 
function success_jsonpCallback(result){ 
    alert(result) 
} 
+0

實際上,這個json數據將在其他地方使用。 – user3523030

+0

我不會在我的代碼中出現錯誤... –

0

我的代碼: 測試頁:

<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
function getTopProductsApi(){ 

var result; 

    $.ajax({ 
     url: '/test/test1.php', 
     type: "get", 
     data: ({}), 
     async:false, 
     dataType: "jsonp", 
     jsonpCallback:"success_jsonpCallback", 
     success: function(rs){ 
      result = rs; 
     } 
    }); 
    //alert(result); 
    return result; 
} 

var result = getTopProductsApi(); 
alert(result); 
</script> 
</head> 
<body> 
</body> 
</html> 

PHP頁面:

<?php 
echo $_GET['callback']. '(' . json_encode('213213') . ')'; 

它運作良好。你可以試試。

0

感謝大家的回答。 最後,我找到了問題。 也許這不是正確的答案,但這些信息對我很有用。 jsonp數據類型始終爲異步。 代碼 - 「返回結果」將始終運行得更快的ajax塊。 所以結果變量總是NULL。 所以我改變我的代碼如下喜歡:

功能getTopProductsApi(執行){

$.ajax({ 
    url: API_url, 
    global: false, 
    cache: false, 
    type: "get", 
    data: ({'current_date':current_date}), 
    dataType: "jsonp", 
    jsonpCallback:"success_jsonpCallback", 
    success: function(rs){ 
     result = rs; 
     window[function_name](result); 
    } 
}); 

}

getTopProductsApi( '另一個函數名');

此方法可以確保我可以先獲取ajax json數據,然後運行我需要的另一個函數。

也許這不是最好的答案,請告訴我,如果你有其他很酷的想法。

感謝