我如何通过 php 附加 jsonp 数组返回

Posted

技术标签:

【中文标题】我如何通过 php 附加 jsonp 数组返回【英文标题】:How I can append jsonp array return by php 【发布时间】:2012-08-17 17:10:53 【问题描述】:

我在访问由 php 脚本返回的 JSONP 数组时遇到问题,我正在处理跨域请求。 我的代码是:

$('input#searchlocation').click(function () 
    $.ajax(
        url: 'http://mydomain/searchlocation.php',
        type: 'get',
        dataType: 'jsonp',
        data: $('form#searchlocfrm').serialize(),
        processData: false,
        crossDomain: true,
        contentType: "application/json",
        success: function (data) 
            $("#searchlocation_result").html("");
            $.each(data.items, function (i, locdata) 
                console.log(locdata);
            );
        
    );
);    

PHP:返回数组:

echo $_GET["callback"] . "(" . json_encode($res) . ")";    

请帮助我如何将返回响应打印到我的页面中。 非常感谢。

【问题讨论】:

试试echo json_encode($res); success 不适用于dataType : jsonp @ValentinRusk 这是 jsonp,不是 json。 嗨 diEcho,我对 web 服务的调用会将响应返回到 json 数组中,所以请指导我如何通过跨域调用获取返回数组。 内容类型应为:“application/javascript 【参考方案1】:

您需要将?callback=? 附加到您的网址,并使用.getJSON

$('input#searchlocation').click(function () 
    $.getJSON('http://mydomain/searchlocation.php?callback=?', $('form#searchlocfrm').serialize(), function (data) 
        $("#searchlocation_result").html("");
        $.each(data.items, function (i, locdata) 
            console.log(locdata);
        );
    );
);

【讨论】:

非常感谢您的快速帮助【参考方案2】:
$('input#searchlocation').click(function () 
    $.ajax(
        url: 'http://mydomain/searchlocation.php',
        type: 'get',
        dataType: 'jsonp',
        data: $('form#searchlocfrm').serialize() + "callback=returnData",
        processData: false,
        crossDomain: true,
        contentType: "application/json"
    );
);

function returnData(data)
     $("#searchlocation_result").html("");
     $.each(data.items, function (i, locdata) 
            console.log(locdata);
     );
   

这应该是因为 jsonp 的想法是你有一个回调函数,而在 ajax 中没有成功,因为它是 jsonp

【讨论】:

【参考方案3】:

这就够了:

$.ajax(
    url: 'http://mydomain/searchlocation.php',
    dataType: 'jsonp',
    data: $('form#searchlocfrm').serialize(),
    success: function (data) 
        // ...
    
);

同样在服务器端:

header('Content-type: application/javascript');
echo $_GET["callback"] . "(" . json_encode($res) . ")";

【讨论】:

以上是关于我如何通过 php 附加 jsonp 数组返回的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本附加到特定的php数组值

PHP如何将数据附加到序列化数组中

如何附加到PHP中的现有数组值[重复]

php文件jsonp返回字符串格式

如何通过 ajax php 调用返回包含 json 对象的数组/json 对象?

如果找到我的变量之一,我如何在 php 中搜索数组并返回 true?