【问题标题】:Can not get Ajax callback json data when use jsonp datatype使用 jsonp 数据类型时无法获取 Ajax 回调 json 数据
【发布时间】:2014-05-25 09:27:18
【问题描述】:

这是我下面的 JS 代码:

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")

但我提醒时没有数据。

谁能说出原因?谢谢

【问题讨论】:

标签: php jquery ajax json jsonp


【解决方案1】:

感谢大家的回答。 最后,我发现了问题。 也许这不是正确的答案,但这些信息对我很有用。 jsonp 数据类型始终是异步的。 代码-“返回结果”总是会在 ajax 块中运行得更快。 所以结果变量总是NULL。 所以我改变了我的代码如下:

函数 getTopProductsApi(function_name){

$.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数据,然后再运行我需要的另一个函数。

也许这不是最好的答案,如果你有其他很酷的想法,请告诉我。

谢谢

【讨论】:

    【解决方案2】:

    我的代码: 测试页面:

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

    效果很好。你可以试一试。

    【讨论】:

      【解决方案3】:

      试试下面的代码:

      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)
      }
      

      【讨论】:

      • 其实这个json数据会用到其他地方。
      猜你喜欢
      • 2015-02-03
      • 2018-09-25
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2018-06-20
      • 2014-08-09
      相关资源
      最近更新 更多