【问题标题】:jQuery Mobile -> Load content from external serverjQuery Mobile -> 从外部服务器加载内容
【发布时间】:2012-03-21 23:53:03
【问题描述】:

我正在开发一个看似基本的移动应用程序(首先)。但我想让应用程序从我们的“头”服务器请求信息。以确保它拥有最新信息。

我目前正在运行这样的 jQuery 脚本。

$.ajax({
        url: 'http://www.domain.com/list.php',
        dataType: 'json',
        crossDomain: true,
        success: function(data) {

            // Remove all content first
            $(contentId +' li').remove();

            // Load Data
            $.each(data.items, function(index, list){
                $(contentId).append('<li><a href="details.html?id=' + list.homeId + '" >' + list.name + '</a></li>\n');
            });

            // Reload View
            $(contentId).listview('refresh');

        }, 
        error: function(jqXHR, textStatus, errorThrown) {
            console.log('Error: '+ jqXHR + textStatus + errorThrown);
        }
    });

实际上,在那个 LIST.PHP 文件上,它确实返回了一个 JSON 字符串。但我为安全所做的是将其添加为标题

header("Access-Control-Allow-Origin: *");

或者我可以将 * 更改为域/url 以增加安全性。但是,如果我不在其中添加该 header() 代码,我的 javascript 会中断并且无法正常运行。

我想我真正想知道的是,我这样做是否正确?还是有更好的方法来做到这一点?我已经尝试过 JSONP,但我似乎无法让它适用于跨域。

我的解决方案合理吗?还是完全废话?任何想法或方向将不胜感激!

【问题讨论】:

    标签: php jquery json cross-domain jsonp


    【解决方案1】:

    我认为你应该调查一下JSONP。这并不难。在客户端,jQuery 已经开箱即用地处理它,只需将?callback=? 附加到 URL。在服务器上,而不是仅仅使用 JSON 响应,例如:

    {
      "foo": "bar"
    }
    

    查找查询参数callback,如果存在,将您的JSON输出包装在一个函数调用中,名称为回调参数的值,因此,对于callback=foo

    foo({
      "foo": "bar"
    })
    

    使用 JSONP 响应时,发送Content-Type: text/javascript。这应该可以在不设置 Access-Control-Allow-Origin 或类似的东西的情况下工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2010-09-15
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多