php
  • javascript
  • jquery
  • cross-domain
  • jsonp
  • 2011-05-05 83 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 
    } 
    

    });

    相关问题