php
  • javascript
  • jquery
  • cross-domain
  • jsonp
  • 2011-05-05 243 views 1 likes 
    1

    這是我的PHP頁面(在不同的URL)...JSONP請求PHP頁面無法正常工作(跨域)

    <?php 
    header('Content-Type: application/json'); 
    ?> 
    stat({"online":1}); 
    

    ,這是我的jQuery:

    $(document).ready(function(){ 
    
        var url = 'http://blah.com/jsontest.php?callback=stat'; 
    
        $.getJSON(url, function(data) { 
         if (data.online !== undefined) { 
          console.log('yay'); 
         } 
        }).error(function() { 
         console.log('no'); 
        }); 
    
    }); 
    

    對於一些因爲它總是記錄「否」,即它運行錯誤功能。

    使用jQuery 1.5.2的任何想法?

    +0

    如果你console.log(數據)你會得到什麼? – 2011-05-05 11:37:22

    +0

    您的'getJSON'調用是否被識別爲JSONP? – 2011-05-05 11:38:47

    +1

    @Nicola - 什麼都沒有,因爲錯誤函數被稱爲不是成功函數。 – Quentin 2011-05-05 11:41:37

    回答

    4

    首先,JSON-P不是JSON。內容類型應該是application/javascript。某些瀏覽器可能會拒絕JSON-P作爲不安全的JSON。其次,getJSON期望您請求的回調方法名稱的?的URL(並且您需要讓您的PHP注意$_GET['callback'])。第三,如果修復不起作用,請查看Firebug/Chrome調試器/ Dragonfly/etc中的Net選項卡,並查看實際通過線路傳輸的數據。

    +0

    我可以使用JSON進行跨域嗎?還是必須使用JSON-P? – fire 2011-05-05 11:43:28

    +3

    您將*使用JSONP,這就是爲什麼它是「發明」的原因。 – 2011-05-05 11:44:06

    +0

    內容類型爲+1 您確實應該使用內置的'callback =?'並讀取服務器上的值。如果您使用自己的硬編碼回調,如果有多個請求打開,您很可能會遇到問題。所以第二點是有效的。 – epascarello 2011-05-05 11:48:15

    0

    有一些與包括「回調」功能的shenanans。顯然你沒有返回一個對象,而是一個在原始客戶端請求中提交的函數。我只是隱約知道這意味着什麼都,然而,我有一些代碼來做到這一點的實際工作:

    服務器端:

    <?php 
    $headers = get_headers($toGetUrl,1); 
    $return["pop_singer"] = "Britney Spears"; 
    // Right here is where the json object gets wrapped in a function that was submitted under the name "callback" 
    echo $_GET['callback']."(".json_encode($return).")"; 
    ?> 
    

    客戶端(這是一回事$ .getJSON( )):

    $.ajax({ 
    type: "GET", 
    url: serverUrl, 
    dataType: 'jsonp', 
    error: function(request, status) { 
        // Do some error stuff 
    }, 
    success: function(data, textStatus, jqXHR) { 
        var property = data.pop_singer; // equals "Britney Spears" 
        // Do some successful stuff 
    } 
    

    });

    相關問題