【问题标题】:JSON data not respondingJSON 数据无响应
【发布时间】:2012-05-23 11:50:56
【问题描述】:

以下是我的代码:

     function jsonpCallback(response){
                    //JSON.stringify(response)
                    alert(response);
                }                
                $.ajax({
                    url: url,
                    dataType: 'jsonp',
                    error: function(xhr, status, error) {
                        alert(error);
                    },
                    success: function(data) {
                        alert(data);
                        jsonpCallback(data);
                    }
                });

这里我的 url 变量是包含以下数据的链接,据我所知它是 JSON 格式:

[{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}] etc..

我想在传递连续数据后调用 jsonpCallback 函数。但是 $.ajax 的成功参数没有调用该函数,这就是我没有将任何数据输入其中的原因。但是我的调试器窗口在那里显示响应,那么为什么它不来 $.ajax 函数呢?

任何帮助...提前致谢。

【问题讨论】:

  • @mgraph : 没有 alert(data) 没有触发
  • 你在调用 XDomain ajax 调用吗..?
  • 你为什么用jsonp,它是跨域调用,还有控制台有什么错误???
  • @KanishkaPanamaldeniya:控制台没有错误
  • @JDev :是的,它是 xDomain ajax 调用

标签: javascript jquery json jsonp


【解决方案1】:

尝试传递 ajax 调用 GET/POST 的类型。

$.ajax({
     type: "GET",
     url: url,
     dataType: 'jsonp',
     error: function(xhr, status, error) { alert(error); },
     success: function(data) {
         alert(data);
         jsonpCallback(data);
     }
});

 function jsonpCallback(response){
      //JSON.stringify(response)
      alert(response);
 }       

【讨论】:

    【解决方案2】:

    您尝试从中加载数据的 URL 不支持 JSONP,这就是未调用回调的原因。

    如果您拥有端点,请确保您处理回调 GET 参数。在 PHP 中,您的输出将如下所示:

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

    这会将结果转换为如下所示:

    jsonp2891037589102([{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}])
    

    当然,回调名称会根据 jQuery 自动生成的内容而改变。

    这是必需的,因为 JSONP 通过在 &lt;head&gt; 中创建新的 &lt;script&gt; 标记来强制浏览器加载数据。如果未处理 callback GET 参数(并且 URL 返回 JSON 响应而不是 JSONP 响应),则数据会被加载,但不会分配给任何东西,也不会(通过回调)传输给任何东西。本质上,数据会丢失。

    如果不修改端点,您将无法从该 URL 加载数据。

    【讨论】:

    • +1 是第一个展示真正问题的人。当我发布我的答案时没有看到你的答案:p
    【解决方案3】:

    我注意到关于 $.ajax 的一件奇怪的事情是,如果内容类型不完全匹配,它就不会被认为是成功的。试着玩弄它。如果您将 success 更改为 complete(并修复参数),它会发出警报吗?

    【讨论】:

      【解决方案4】:

      它不起作用,因为您的服务器没有呈现 JSONP 响应。它呈现一个 JSON 响应。

      要使 JSONP 工作,服务器必须调用 ajax 请求发送的 javascript 函数。函数由jQuery生成,不用担心。

      不过,服务器必须担心它。默认情况下,此函数的名称在 callback 参数中传递。例如,服务器的 URL 将是 http://some.domain/ajax.php?callback=functionName(注意 callback=functionName)。

      所以你需要在服务器端(这里是 PHP)实现类似下面的东西:

      $callback = $_GET['callback'];
      // Process the datas, bla bla bla
      // And display the function that will be called
      echo $callback, '(', $datas, ');';
      

      返回的页面会在javascript中执行,所以会调用函数,所以jQuery会调用success函数。

      【讨论】:

        【解决方案5】:

        首先检查您在哪个事件中调用$.ajax 函数...

            <script type='text/javascript'>
            jQuery('#EnrollmentRoleId').change(function(){
        alert("ajax is fired");
            $.ajax({
                 type: "GET",
                 url: url,
                 dataType: 'jsonp',
                 error: function(xhr, status, error) { alert(error); },
                 success: function(data) {
                     alert(data);
                     jsonpCallback(data);
                 }
            });
            });
             function jsonpCallback(response){
                  //JSON.stringify(response)
                  alert(response);
             }       
        
            </script>
        

        第二次尝试将$ 替换为jQuery

        如果您认为有任何冲突错误,请尽量避免冲突。

        jQuery ajax error callback not firing

        function doJsonp()
        {
        alert("come to ajax");
            $.ajax({
                url: url,
                dataType: "jsonp",
                crossDomain: true,
                jsonpCallback:'blah',
                success: function() { console.log("success"); }, 
                error: function() { console.log("error"); } 
            });
        }
        

        然后检查你的 json 数据是否有效..

        谢谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-06
          • 2017-09-23
          • 2021-11-09
          • 2021-11-28
          • 2020-12-18
          • 1970-01-01
          相关资源
          最近更新 更多