=波波日志 > JavaScript/Ajax > 为什么数组作为参数传递进去取不了值出来?=
为什么数组作为参数传递进去取不了值出来?
好像原来都OK的, 换个OS就不行了?
还有这种诡异的事?
各位兄弟帮忙看一下, 谢了.
或者说该怎样取值?
+展开
-JavaScript
function Test(){
var arrData = [];
GetInfo(arrData);
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
var arrData = [];
GetInfo(arrData);
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
问题点数:100 回复次数:42
-------------------------------
showbo
code-design.cn
发表于:2009-05-18 10:29:101楼 得分:0
和系统没关系吧。。
你的bXmlHttpSupport是不是限定了只有支持XMLHttpRequest的浏览器???
如果是你使用ie6浏览器是创建不了XMLHttpRequest的,只能使用activx
wjfmail
f16
发表于:2009-05-18 12:40:333楼 得分:0
向一楼的仁兄学习,没留意过这个问题.
y_cc
允许的空间, 时间内
发表于:2009-05-18 14:06:204楼 得分:0
不关ajax的事. 再说明一遍函数吧.
+展开
-JavaScript
function Test(){
var arrData = [];
GetInfo(arrData);
alert(arrData);//----------------->空值
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
alert(arrData);//----------------->有数据
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
var arrData = [];
GetInfo(arrData);
alert(arrData);//----------------->空值
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
alert(arrData);//----------------->有数据
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
showbo
code-design.cn
发表于:2009-05-18 15:10:025楼 得分:0
知道你错哪里了
oRequest.open('POST', sUrl); //这里没指定第3个参数时,就是默认为异步提交
这样
GetInfo(arrData);
alert(arrData);//----------------->有可能ajax还没返回,所以这里输出为空
但是
+展开
-JavaScript
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
alert(arrData);//----------------->有数据
arrData = obj.Data1;
alert(arrData);//----------------->有数据
你在状态函数中alert,而且状态为4了,这样当然有数据了
改为同步的,指定为 oRequest.open('POST', sUrl,false);
y_cc
允许的空间, 时间内
发表于:2009-05-18 15:52:437楼 得分:0
我用先后步骤测试过了, 是先得到数据, 才到这步的, 所以设置同步还是一样的
GetInfo(arrData);
alert(arrData);//----------------->有可能ajax还没返回,所以这里输出为空
showbo
code-design.cn
发表于:2009-05-18 16:16:068楼 得分:100
在仔细一看,找出了一个很严重的错误,js非obj对象变量是不能引用赋值的,就是变量的作用域的问题,当然同步的问题也可能存在
+展开
-JavaScript
function Test(){
var arrData = [];
GetInfo(arrData);
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;//其实你这里设置的是GetInfo的参数arrData,并未设置 Test里面的arrData变量,GetInfo的参数arrData只是存储Test里面的arrData的值的另外一个变量,不知道这样说你清楚没有
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
var arrData = [];
GetInfo(arrData);
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;//其实你这里设置的是GetInfo的参数arrData,并未设置 Test里面的arrData变量,GetInfo的参数arrData只是存储Test里面的arrData的值的另外一个变量,不知道这样说你清楚没有
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
你运行下面的例子就知道了,你的错误是变量作用域,和可能存在的同步问题
+展开
-HTML
<script>
var d;v//全局变量d
alert(d)//输出undefined
function setD(d){
d={name:'showbo'};
alert(d)//输出[object Object],此时是参数d,而非全局变量d,并且参数d只是全局变量d的一个拷贝,并非是全局变量d的引用
setD('xx');
alert(d)//输出undefined
</script>
var d;v//全局变量d
alert(d)//输出undefined
function setD(d){
d={name:'showbo'};
alert(d)//输出[object Object],此时是参数d,而非全局变量d,并且参数d只是全局变量d的一个拷贝,并非是全局变量d的引用
setD('xx');
alert(d)//输出undefined
</script>
showbo
code-design.cn 发表于:2009-05-18 16:18:249楼 得分:0
代码加说明时出错了,下面这个才是正确的。。
+展开
-HTML
<script>
var d;
alert(d)
function setD(d){
d={name:'showbo'};
alert(d)
}
setD('xx');
alert(d)
</script>
var d;
alert(d)
function setD(d){
d={name:'showbo'};
alert(d)
}
setD('xx');
alert(d)
</script>
fx_blog
发表于:2009-05-18 16:19:1010楼 得分:0
调用错了,兄弟.
你应该在给数组辅值后,再到判断有没有值.
+展开
-HTML
<html>
<head>
<script>
function arrHasVal(arr)
{
return arr.length>0?true:false;
//在这里操作数据.
//而不应在ajax里方法操作数据
}
</script>
</head>
</html>
function Test(){
var arrData = [];
GetInfo(arrData);
alert(arrData);//----------------->空值
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
alert(arrData);//----------------->有数据
arrHasVal(arrData);
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
<head>
<script>
function arrHasVal(arr)
{
return arr.length>0?true:false;
//在这里操作数据.
//而不应在ajax里方法操作数据
}
</script>
</head>
</html>
function Test(){
var arrData = [];
GetInfo(arrData);
alert(arrData);//----------------->空值
}
function GetInfo(arrData) {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
alert(arrData);//----------------->有数据
arrHasVal(arrData);
}
}
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
y_cc
允许的空间, 时间内
发表于:2009-05-18 19:54:1412楼 得分:0
那么该怎么像C语言一样给全局参数赋值?
就是引用赋值.
或者有什么其他的办法?
showbo
code-design.cn
发表于:2009-05-19 08:49:1413楼 得分:0
全局变量
js非obj变量没有引用的,就是传址
+展开
-JavaScript
var arrData//全局变量
function Test(){
GetInfo();
}
function GetInfo() {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
}
}
oRequest.open('POST', sUrl,false); //注意要同步提交,要不在ajax状态为4前都不能使用arrData,如果为同步提交可以不需要处理函数了,直接后面
oRequest.send(null);
//arrData=eval('(' + oRequest.responseText + ')'); //同步可以不需要处理状态
}
}
function Test(){
GetInfo();
}
function GetInfo() {
if(bXmlHttpSupport) {
var sUrl = 'info.php';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var obj = eval('(' + oRequest.responseText + ')');
arrData = obj.Data1;
}
}
oRequest.open('POST', sUrl,false); //注意要同步提交,要不在ajax状态为4前都不能使用arrData,如果为同步提交可以不需要处理函数了,直接后面
oRequest.send(null);
//arrData=eval('(' + oRequest.responseText + ')'); //同步可以不需要处理状态
}
}
类别:JavaScript/Ajax 作者:波波 日期:2009-07-02 【评论:0 阅读:】
暂时没有评论!
发表留言
同类热门博文
- ·AJAX跨域问题解决办..
- ·ajax+asp.net+mssql..
- ·ajax问题总结
- ·JavaScript解析XML的..
- ·JS URL编码函数
- ·ajax+asp+mssql无刷..
- ·ajax无刷新上传文件..
- ·美化alert,confirm..
博格Tag
- flash/flex/fcs/AIR(750)
- Asp.Net/C#/WCF(476)
- JavaScript/Ajax(232)
- 操作系统及应用软件(206)
- SQL及数据库(105)
- 黑客技术(96)
- Asp/VBScript(85)
- 网站排名及优化(82)
- PHP/apache/Perl(72)
- HTML/WML/CSS兼容(65)
- 其他(59)
- 个人日志(44)
- lucence.net/分词技术(33)
- C#设计模式(22)
- 计算机网络(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(10)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除!
Powered by showbo,G51人力资讯网,桂ICP备05005887号
Powered by showbo,G51人力资讯网,桂ICP备05005887号
