ecshop中ajax的调用原理

1:首先ecshop是如何定义ajax对象的。

     ecshop中的ajax对象是在js/transport.js文件中定义的。里面是ajax对象文件。声明了一个var Ajax = Transport;对象和一个方法Ajax.call = Transport.run;

 

2:ecshop中ajax可以使用两种方式传递数据.一种是get方式,一种是post方式.

     Ajax.call( 'user.php?act=is_registered', 'username=' + username, registed_callback , 'GET', 'TEXT', true, true );

     Ajax.call('user.php?act=return_to_cart', 'order_id=' + orderId, returnToCartResponse, 'POST', 'JSON');

  

3:ecshop中的 ajax可以是传递text数据,也可以是一个json对象。比如以下代码

   goods.quick    = quick;
  goods.spec     = spec_arr;
  goods.goods_id = goodsId;
  goods.number   = number;
  goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);

  Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');

   里面的goods就是对象.而且是靠json来传递的。返回的结果result也是对象.

 

4:ecshop ajax函数里面.第三个参数就是回掉函数的名称。比如以上代码addToCartResponse 这个函数就是ajax处理结果的回调函数.

 

5:在ecshop的php代码中,一般是通过get或者post方式来接受函数。比如以下例子,如果接受的是对象。还需要用json数据格式来处理.比如以下

   include_once('includes/cls_json.php');
    $_POST['goods'] = json_str_iconv($_POST['goods']);
   处理的返回结果,也需要是json格式发送给js

   die($json->encode($result));

例如:

Html代码

1  < input  type ="button"  name ="search"  value ="{$lang.button_search}"  onclick ="searchUser();"   />
2 
3  < select  name ="user_search[]"  id ="user_search"  size ="15"  style ="width:260px"  ondblclick ="addUser()"  multiple ="true" >
4        </ select >

Javascript 代码

 

 1  /* *
 2  * 按用户名搜索用户
 3  */
 4  function searchUser()
 5 {
 6    var eles = document.forms['theForm'].elements;
 7 
 8    /*  填充列表  */
 9    var keywords = Utils.trim(eles['keyword'].value);
10    if (keywords != '')
11   {
12     Ajax.call('bonus.php?is_ajax=1&act=search_users', 'keywords=' + keywords, searchUserResponse, "GET", "JSON");
13   }
14 }
15 
16  function searchUserResponse(result)
17 {
18    var eles = document.forms['theForm'].elements;
19   eles['user_search[]'].length = 0;
20 
21    if (result.error == 0)
22   {
23      for (i = 0; i < result.content.length; i++)
24     {
25        var opt = document.createElement('OPTION');
26       opt.value = result.content[i].user_id;
27       opt.text  = result.content[i].user_name;
28       eles['user_search[]'].options.add(opt);
29     }
30   }
31 }

Php代码

 

 1  /* ------------------------------------------------------  */
 2  // -- 搜索用户
 3  /* ------------------------------------------------------  */
 4  if ( $_REQUEST['act'] == 'search_users')
 5 {
 6      $keywords = json_str_iconv( trim( $_GET['keywords']));
 7 
 8      $sql = "SELECT user_id, user_name FROM " .  $ecs->table('users') .
 9             " WHERE user_name LIKE '%" . mysql_like_quote( $keywords) . "%' OR user_id LIKE '%" . mysql_like_quote( $keywords) . "%'";
10      $row =  $db->getAll( $sql);
11 
12     make_json_result( $row);
13 }

你可能感兴趣的:(ecshop)