JQuery
Jun 17

解决jquery中的return false不起作用的原因,jquery ajax 老是返回false的原因
why jquery ajax alway return false ?
在代码中使用ajax调用后台,但是不管后台的结果是如何,老是返回false ,很是纳闷,分析如下
function add_check(){
 var Parent_Unique_ID  = $.trim($("#Parent_Unique_ID").val());
 var checkparentsku = ajaxCheckParentSku(Parent_Unique_ID);
 alert(checkparentsku);//这边老是弹出false ,不知道为什么
 if(checkparentsku == false){
  return false;
 }
  //ajax check parentsku end
}

function ajaxCheckParentSku(Parent_Unique_ID){
 var result = false;
 if(Parent_Unique_ID ==""){
  alert("Parent_Unique_ID 不能为空");
 }else{
  var request =$.ajax({
   type:'POST',
   url: "__ROOT__/admin.php?m=product&a=ajaxCheckParentSku",
   data:{Parent_Unique_ID:Parent_Unique_ID}//,
   //dataType:'JSON'
   //timeout:60000,
  });
  request.done(function(msg){
   //alert(msg);
   if(msg.productExist =="1"){
    alert("Parent_Unique_ID值" + Parent_Unique_ID + "已存在请重新输入");
    return false; //为什么
   }else{
    return true;//为什么不管用呢?
   }
  });
  request.fail(function(jqXHR,textStatus){
   alert(textStatus);
   returnfalse;
  });
 }
}
原因分析:
逻辑没弄清楚,要将ajax设置为同步的,需要使用$.ajax,$.get默认是异步的,并且不是在回调函数内return,而是在ajaxCheckParentSku函数中声明一个变量来接受回调函数的返回值,然后ajaxCheckParentSku返回这个值。

function ajaxCheckParentSku(Parent_Unique_ID){
 var result = false;
 if(Parent_Unique_ID ==""){
  alert("Parent_Unique_ID 不能为空");
  result = false;
 }else{
  var request =$.ajax({
   async:false,//要设置为同步的,要不返回值永远为false
   type:'POST',
   url: "__ROOT__/admin.php?m=product&a=ajaxCheckParentSku",
   data:{Parent_Unique_ID:Parent_Unique_ID}//,
   //dataType:'JSON'
   //timeout:60000,
  });
  request.done(function(msg){
   //alert(msg);
   if(msg.productExist =="1"){
    alert("Parent_Unique_ID值" + Parent_Unique_ID + "已存在请重新输入");
    result=false; //为什么
   }else{
    result=true;//管用?
   }
  });
  request.fail(function(jqXHR,textStatus){
   alert(textStatus);
   result=false;
  });
 }
 return result;////==========这里才是ajaxCheckParentSku的返回值,回调函数返回值没有意义
}

说明
async: false,(默认是true);
如上:false为同步,这个 ajaxCheckParentSku()方法中的Ajax请求将整个浏览器锁死,只有add.php执行结束后,才可以执行其它操作
当async: true 时,ajax请求是异步的。
但是其中有个问题 ajaxCheckParentSku()中的ajax请求和其后面的操作是异步执行的,那么当add.php还未执行完,
就可能已经执行了 ajax请求后面的操作,如alert(msg); 然而,temp这个数据是在ajax请求success后才赋值的,结果,输出时会为空。

由于ajax默认为异步调用,所以很少能直接拿到ajax的返回值。但有时候由于业务需要还必须要通过ajax来拿,那么我这里提供两种方案。具体方法:
1、就像通过设置async:false让其异步变同步;
2、可以将接下来需要使用到的参数在success之内执行
3、在方法前设置变量result 再后面赋值
这两种方案,你根据你项目的具体实际选择一个。
使用第一种相对来讲,假如你对性能要求不是太大可以选择。

why jquery ajax alway return false ?

Tags: ,
Jun 4
jquery获取不到动态生成的checkbox的可能原因分析?导致无法对动态生成的checkbox 设置值
1、一般情况下是在动态生成之后设置值,一般在加载页面的时候可以配置  $(document).ready(function(){})下了
2、ajax的情况下
 这页面已经加载完成了,使用ajax动态加载的对象当然调不到
 设置代码要放在post里面,你这个代码是post还没运行完,下面遍历的就已经运行了。或者你设置为异步
比如:
 var sizeUniqueStr = '<{$product.Size}>' ;
 var sizeUniqueArr = sizeUniqueStr.split(",");//add by itlife365.com qq:305347185
   $.post("__ROOT__/admin.php?m=product&a=productsizelist",{'type':selectValue},function(result){
    $('#goodsSize').empty();////add by itlife365.com qq:305347185
    $.each(result, function (n, value) { 
    //alert(value.typevalue + ' ' + "value"); 
    if(iseditstatus =="1"){//jQuery 判断是否包含在数组中,如果不包含在数组中,则返回 -1;从0开始
   var selectValue = $.inArray(escape(value.typevalue),sizeUniqueArr);
   if(selectValue != -1){////add by itlife365.com qq:305347185
    $('#goodsSize').append("<div class='col-xs-2 h50'><label class='col-xs-12'><input type='checkbox' name='size_checkbox' value='"+value.typevalue+"' checked='checked'><span >"+value.typevalue+"</span></label></div>");
   }else{
    $('#goodsSize').append("<div class='col-xs-2 h50'><label class='col-xs-12'><input type='checkbox' name='size_checkbox' value='"+value.typevalue+"' ><span >"+value.typevalue+"</span></label></div>");
   }
    }else{
   $('#goodsSize').append("<div class='col-xs-2 h50'><label class='col-xs-12'><input type='checkbox' name='size_checkbox' value='"+value.typevalue+"'><span >"+value.typevalue+"</span></label></div>");
    }
   }); 
   },'json');


---jquery checkbox ajax
how-to-set-checkbox-value-when-ajax-by-jquery
Tags: , ,
Jan 2

windows下安装dmake

How to install dmake
    1、Download and install ActivePerl
    2、Open Command Prompt
    3、Type ppm install dmake
   tips:如何运行ppm install dmake 异常,可以参考文章http://itlife365.com/blog/post/os-windowxp-dos-http_proxy.php 设置http_proxy代理进行联网下载

Tags: ,
Jan 2

perl通过环境变量解决路径中包含中文名的问题,通过环境变量修改ppm的默认路径即可

C:\>set ACTIVEPERL_PPM_HOME=C:\perl\temp
C:\>ppm install your-package-name  记得替换为对应的值

(参考http://community.activestate.com/forum-topic/ppm-does-not-work-after-install

Tags:
Jan 2

window xp dos下通过设置http_proxy 使用代理上网或者下载文件

由于公司内部本机不能上网,都是通过代理上网的,在配置perl 的ppm文件升级的时候经常报错误,
比如升级perl install dmake 下载dmake的ppm包的时候报
Downloading ActiveState Package Repository packlist...failed 500 Can't connect to ppm4.activestate.com:80 (Bad hostname)
ppm install failed: Can't find any package that provides dmake

这时可以通过设置环境变量http_proxy 来解决。
dos下查看是否有设置变量set http_proxy

The http_proxy Environment Variable 几种http_proxy的设置区别
如果我代理的IP是10.2.4.5 端口是808

Set the http_proxy variable with the hostname or IP address of the proxy server:

  http_proxy=http://proxy.example.org
  http_proxy=10.2.4.5:808
If the proxy server requires a user name and password, include them in the following form:

  http_proxy=http://username:password@proxy.example.org

If the proxy server uses a port other than 80, include the port number:

  http_proxy=http://username:password@proxy.example.org:8080

各平台操作系统设置http_proxy的方法 Setting http_proxy
Windows XP设置代理
    1、Open the Control Panel and click the System icon.登陆到控制面板并点击系统
    2、The System Properties dialog is displayed.系统属性对话框
    3、On the Advanced tab, click on Environment Variables.点击高级 tab 页面的环境变量
    4、The Environment Variables dialog is displayed.
    5、Click New in the System variables panel. 新建环境变量
    6、The New Sytem Variable dialog is displayed.
    7、Add http_proxy with the appropriate proxy information (see examples above).设置环境变量

Windows 200x设置代理
    1、Right click on My Computer.
    2、Click on Properties and select the Advanced tab.
    3、Click "Environment Variables".
    4、The "System Variables" dialog appears.
    5、Click New and add http_proxy, with the appropriate proxy information (see examples above).

Windows NT设置代理
    Right click on My Computer.
    Click on Properties, select the Environment tab.
    Add http_proxy with the appropriate proxy information (see examples above).

Windows 95/98/ME设置代理
    Open the C:\autoexec.bat file for editing (e.g. in Notepad).
    Add a "SET" line like the following (see examples above):
          SET http_proxy=http://username:password@hostname:port
    Restart your computer for the change to take effect.

Mac OS X设置代理
The http_proxy should be set in two places on OS X:
    Shell: Add a line like the following in .bash_profile (/Users/<name>/.bash_profile):
          http_proxy=http://username:password@hostname:port;  export http_proxy
    This setting applies to PPM when it is launched from or used at the command line.
    Desktop: Add an entry like the following in your environment.plist file (/Users/<name>/.MacOSX/environment.plist):
          <key>http_proxy</key>
          <string>http://username:password@hostname:port</string>
    This setting applies to PPM when it is launched by clicking the PPM icon.

Linux, Solaris or HP-UX设置代理
Set the http_proxy environment variable using the command specific to your shell (e.g. set or export). To make this change persistent, add the command to the appropriate profile file for the shell. For example, in bash, add a line like the following to your .bash_profile or .bashrc file:
    http_proxy=http://username:password@hostname:port;  export http_proxy

分页: 1/11 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]