【问题标题】:php create friendly urlphp创建友好的url
【发布时间】:2016-06-02 17:46:43
【问题描述】:

我有一个页面,其中包含我构建的一些链接,这些链接调用了 Web 服务。

这是jquery函数的摘录:

$.ajax({
    type: 'GET',
    dataType: 'json',
    url: 'json.php',

    success: function (response) {
        data = response.obj;
        var errorCode = response.errorCode;
        if (errorCode === 200) {
            $.each(data, function (key, value) {
                l_id_nation = value.id;

                var name = value.name;
                var continente = name.val;

                $('#sidemenu').append('<li><a class="id_continent"  href="javascript:void(0)">' + continente + '</a></li>');

            });

            $('.id_continent').click(function () {
                var id_continent = $(this).html();
            });
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    }
});

点击后,我会打开一个显示一些信息的页面。 页面的url是/trip.php?id_trip=1234&amp;continet=oceania

我想要一个类似/trip/123/oceania的网址

我正在考虑创建一个路由文件,但我不明白如何动态创建这个新 url。

【问题讨论】:

  • ajax 函数似乎独立于所需的 url 结构 - 或者是 "url of the page" 您引用了您在 ajax 中生成的链接的 href - 抱歉,有点不清楚
  • 在响应客户端之前,您需要在服务 api 中处理生成的 url。这种方式使您的 url 与客户端和服务器同步。而且您只管理服务器中的所有内容
  • 你应该在你的 json.php 中返回一个友好的 url 并在你的 javascript 客户端的应用程序中使用它。

标签: php jquery url routes


【解决方案1】:

如果我的解释正确(?)您希望转换从“webservice”调用中获取的 url 并将它们转换为 seo 友好的链接?

以下不是jQuery,但似乎解析数据并以您想要的格式返回url。

if( typeof( 'getPairs' )!='function' ){
    function getPairs(d,z) {
        var a = new Object();
        var pr = d.split(z);
        for( var i=0;i<pr.length;i++ ) {
                var p = pr[i].indexOf('=');
                if (p == -1) continue;
                var n = pr[i].substring(0,p);
                var v = pr[i].substring(p+1);
                a[n] = unescape(v);
        }
        return a;
    }
}
if( typeof( 'prepareurl' )!='function' ){
    function prepareurl(u){
        var p=u.split('?')[0].split('.')[0];
        var q=u.split('?')[1];
        var t=[p];
        var o=getPairs( q, '&' );
        for( k in o )t.push( o[k] );
        return t.join('/');
    }
}

alert( prepareurl( '/trip.php?id_trip=1234&continent=oceania' ) );

will return `/trip/1234/oceania`

【讨论】:

    【解决方案2】:

    我不确定这与您的设置有多大的相关性,但我建议使用出色的微框架 Slim,它不仅可以帮助您处理动态路由,还可以帮助您更轻松地管理 Web 服务。 设置 Slim 非常简单,请在此处阅读文档:http://www.slimframework.com/

    使用 Slim 你可以做这样的事情,你指向的 url,/trip.php?id_trip=1234&continet=oceania 可以在这样的路由中指定,

    $app->get('/trip/{trip_id}/{continent}', function($request, $response, $args){
       $trip_d = $args['trip_id'];
       $continent = $args['continent']
       //Do something
    });
    

    就这么简单,任何匹配上述路由的 GET 请求都会到达这个控制器,你可以在方法中做你的事情,而且 Slim 还内置了对 Twig 模板系统的支持,这恰好是管理你的一个很好的资源意见。

    如果你想在没有任何框架的情况下设置动态路由,你必须在 .htaccess 文件中使用重写规则,你可以在这里找到一些有用的信息:http://code.tutsplus.com/tutorials/using-htaccess-files-for-pretty-urls--net-6049 我建议使用微框架而不是重新发明整个事物,希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多