2010-09-02 60 views
0
var resturl = "http://example.com"; 
cj.getJSON(
    resturl + "&callback=?",   
    function(data) 
    { 
     console.log(data); 
    } 
); 

我的回調函數永遠不會被調用。有任何想法嗎?這裏如何從jQuery中的外部URL獲取數據?

+0

你檢查過請求是否成功嗎? – 2010-09-02 16:46:23

+0

用螢火蟲測試你的頁面會顯示問題。 – Arman 2010-09-02 16:49:00

回答

11

兩件事情:

首先您的網址additon應該"?callback=?"因爲沒有其他的查詢字符串,或者使用全$.ajax()呼叫與jsonp數據類型,因此它增加了需要的查詢字符串,像這樣:

$.ajax({ 
    url: resturl, 
    dataType: 'jsonp', 
    success: function(data){ 
    console.log(data); 
    } 
}); 

其次,您要支持的域名必須支持JSONP

+0

@庫爾德 - 很好聽,你有其他問題嗎? – 2010-09-02 17:13:29

+0

只是好奇我的要求是不顯示在螢火蟲.. – 2010-09-02 17:27:34

+1

@庫爾德 - 它不會顯示在XHR下,它會顯示爲正常的腳本請求,因爲它是JSONP。 – 2010-09-02 17:33:13

0

這應該只要在服務器端發送的數據,並使用JSONP

var resturl = "http://example.com"; 
$.getJSON(resturl,{"callback":"?"},function(data, textStatus){ console.log(data)}); 
+0

這並沒有工作:(嘗試其他.. – 2010-09-02 17:02:40

0

根據文檔回調僅在成功執行工作。所以一般的請求可能會失敗。構造的URL也不包含有效的查詢字符串。你開始查詢字符串與?,但你的URL只包含一個&這表明額外的查詢字符串參數:

回調(數據,textStatus)如果請求成功時執行的回調函數。

http://api.jquery.com/jQuery.getJSON/

但我不知道,如果額外JSONP選項更改一些關於這一政策。

1

請記住,jquery將執行您的回調作爲一個函數,所以你必須確保你的服務器返回的JSON包裝爲回調。

這是一個非常簡單的工作示例。

的Javascript:

var myURL = "http://www.someserver.com/somegreatapplication.php?callback=?"; 
$.getJSON(myURL, function(data) { 
    $("#somediv").html(data.htmlCode); 
}); 

somegreatapplication.php

<?php 

    $output['htmlCode'] = "<b>This worked!</b>"; 

    // Properly format the jsonP response // 
    $json = json_encode($output); 
    header("Content-type: application/json"); 
    exit($_GET['callback'] . ' (' . $json . ');'); 
?> 

注意,PHP將不會返回原始JSON代碼就像你可能習慣了,但實際上將返回回調函數,包括JSON。 jQuery將變成您的網址是這樣的:

http://www.someserver.com/somegreatapplication.php?callback=jsonp1283446768493&_=1283446768526

你的PHP然後會輸出這樣的:

即得到運行,則該對象可以在自己的getJSON內(
jsonp1283446768493({"menuHTML":"<b>This worked!</b>"}); 

。 .. function(){});

所有這些當然都假設你正在控制通信的兩端。如果你不這樣做,那麼你需要確保另一端給你正確的JSONP輸出(如果他們強制這樣做,你可能需要使用一個特定的回調函數)

+1

'$ .getJSON(menuURL,function(data){'應該'$ .getJSON(myURL,function(data){' – Benjamin 2015-04-24 12:00:39