thinkphp中通过AJAX的一个URL问题

wboebnwoeinwoen 2013-08-26 05:15:44
一个商城系统:选择每个商品颜色显示相应的库存数量

jquery:

$('span[class="colors"]').on('click', function() {
var colorID = $(this).attr('id');

// 给选择的颜色添加红边框以便提醒客户
// border:1px solid red;
$('span[id="'+colorID+'"]').css('border', '1px solid red')
.siblings().css('border', '0 none');
$.post('selectColors', { colorID: colorID }, function(result) {
alert(result);
}, 'json');
//$('#color').val(colorID); // hidden
});


ProductsAction.class.php:

/**
* 选择商品颜色以显示相应存货数量
*
*/
public function selectColors() {
// 通过AJAX返回相应颜色的商品存货数量
if ($this->isAjax()) {
$colorID = Input::getVar($_POST['colorID']); // color的colorID
$proID = Input::getVar($_GET['id']); // 当前商品 id

$count = M('ColorsCount')->where('proID = '.$proID.' and colorID = '.$colorID)->limit('1')->getField('count');
if ($count) {
$this->ajaxReturn($count, '', 1);
} else {
$this->ajaxReturn(0, '', 0);
}
}
}


我的当前页面路径是:http://192.168.255.128/jewel/index.php/Products/detail/id/23.html(因为我的开发环境是centos,而最后的.html因为我在thinkphp的配置文件中设置了结尾是.html)

但我用firebug看传过去的ajax是:
POST http://192.168.255.128/jewel/index.php/Products/detail/id/selectColors 200 OK 40ms

而且结果是这样的:
(这是Post)
(这是响应)(为什么会这样?)

我想应该就是这个AJAX的路径问题吧??那应该怎么去改呢?
...全文
2854 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
natici 2013-10-11
  • 打赏
  • 举报
回复
怀疑是tp内部错误而返回错误页面。
xuyanlu 2013-10-11
  • 打赏
  • 举报
回复
是不是直接display整个页面了!而不是抛出你定义的值
natici 2013-10-11
  • 打赏
  • 举报
回复
alert(result);改为console.log(result); 再看看控制台
冰糖-雪梨 2013-10-08
  • 打赏
  • 举报
回复

用 post地址用 U()吧  U("Products/selectColors"); 这会生成一个连接地址
ajaxReturn 表示没用过
一般就直接 echo json_encode(array(
  'count'=>1,
  'state'=>1,
));
wzb0712 2013-10-07
  • 打赏
  • 举报
回复
很明显地址不对
www_7di_net 2013-08-29
  • 打赏
  • 举报
回复
如果你有提前 OB_start() 的話,這段代碼稍作修改即可,如下:
public function selectColors() {
	// 通过AJAX返回相应颜色的商品存货数量
	if ($this->isAjax()) {
		OB_clean();
		$colorID = Input::getVar($_POST['colorID']);    // color的colorID
		$proID      = Input::getVar($_GET['id']);            // 当前商品 id
		 
		$count = M('ColorsCount')->where('proID = '.$proID.' and colorID = '.$colorID)->limit('1')->getField('count');
		if ($count) {
			$this->ajaxReturn($count, '', 1);
		} else {
			$this->ajaxReturn(0, '', 0);
		}
		Die();
	}
}
wboebnwoeinwoen 2013-08-27
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
AJAX 的响应程序只应返回被请求的数据 而你确返回了整个页面 如果那些 html 代码不是你发出的,请检查 ajax 模式是否开启
对啊。。。为什么会返回整个页面?是不是firebug那里看的那个路径的问题??那应该怎么去改呢?? ajax已经开启了。我其他地方都可以的
xuzuning 2013-08-27
  • 打赏
  • 举报
回复
AJAX 的响应程序只应返回被请求的数据 而你确返回了整个页面 如果那些 html 代码不是你发出的,请检查 ajax 模式是否开启
深圳phper 2013-08-27
  • 打赏
  • 举报
回复
if ($count) { $this->ajaxReturn($count, '', 1); } else { $this->ajaxReturn(0, '', 0); } 直接改为: if ($count) { echo $count; } else { echo 0; }
wboebnwoeinwoen 2013-08-27
  • 打赏
  • 举报
回复
引用 3 楼 yulongshuai 的回复:
个人觉得TP的ajaxReturn不怎么好用
但其他功能都行的喔。。。我之前做了注册和登录的验证都OK的
432345 2013-08-27
  • 打赏
  • 举报
回复
个人觉得TP的ajaxReturn不怎么好用

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧