JSON数据没有响应

时间:2012-05-23 11:50:57

标签: javascript jquery json jsonp

以下是我的代码:

     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函数?

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

5 个答案:

答案 0 :(得分: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);
 }       

答案 1 :(得分:1)

您尝试加载数据的网址不支持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的工作原理是在<script>中创建一个新的<head>标记,以强制浏览器加载数据。如果callback GET参数未被处理(并且URL返回JSON响应而不是JSONP响应),则数据将被加载yes,但不会被分配给任何内容,也不会被转移(通过回调任何事情。从本质上讲,数据会丢失。

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

答案 2 :(得分:0)

首先检查您正在呼叫的事件$.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数据是否有效..

由于

答案 3 :(得分:0)

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

答案 4 :(得分:0)

它不起作用,因为您的服务器不呈现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函数。