2

以下是我的代码:

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

任何帮助...在此先感谢。

4

5 回答 5

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);
 }       
于 2012-05-23T12:05:56.243 回答
1

您尝试从中加载数据的 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 通过在 中创建一个新<script>标签<head>来强制浏览器加载数据。如果callback未处理 GET 参数(并且 URL 返回 JSON 响应而不是 JSONP 响应),则数据会被加载,但不会分配给任何东西,也不会(通过回调)传输给任何东西。本质上,数据会丢失。

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

于 2012-05-23T12:19:17.890 回答
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 错误回调未触发

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 数据是否有效。

谢谢

于 2012-05-23T12:14:57.253 回答
0

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

于 2012-05-23T12:18:26.457 回答
0

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

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

但是,服务器必须担心它。默认情况下,此函数的名称在callback参数中传递。例如,服务器的 URL 将是http://some.domain/ajax.php?callback=functionName (notice 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函数。

于 2012-05-23T12:22:51.710 回答