我正在尝试创建一个简单的函数,在调用时将返回正确的字符串:
function getState(abbr){
   if (abbr=="WY")
   {
   return "Wyoming";
   }
}

然后电话是这样的:

var stateName = getState("WY");

然而,所有返回的是:0

对不起,如果我遗漏了明显的东西.

更新 – 我的原始概率是因为“&”这是我正在处理的真实代码:

function getState(abbr){
    var url = "states.asp"
    var state = ""; 
    $.get(url,function(data) {
        var i = 0;
        $.each($('state',data),function(index,el) {            
            if (abbr == ($(this).attr("abbr"))){
                //alert($(this).attr("abbr"));
                state = $(this).text();
            }//if (abbr == $(this).attr("abbr")){
        });//$.each($('state',el) {
    }).success(function() { 
        alert("x" + state);
        return state;
    }); //.success(function() { 
    //$.get(url,function(data) {
    alert("y" + state); 
    return state;
}

我的电话结果是“未定义”:

alert(getState("WY"));

警报(“x”状态)有效.

更新#2 —
这里是states.asp生成的所有内容(现在)…稍后它将返回公司等:

<?xml version="1.0" encoding="utf-8"?>
<STATELIST>
<STATE abbr="AL">Alabama</STATE>
<STATE abbr="AK">Alaska</STATE>
<STATE abbr="AZ">Arizona</STATE>
<STATE abbr="AR">Arkansas</STATE>
<STATE abbr="CA">California</STATE>
<STATE abbr="CO">Colorado</STATE>
<STATE abbr="CT">Connecticut</STATE>
<STATE abbr="DE">Delaware</STATE>
<STATE abbr="FL">Florida</STATE>
<STATE abbr="GA">Georgia</STATE>
<STATE abbr="HI">Hawaii</STATE>
<STATE abbr="ID">Idaho</STATE>
<STATE abbr="IL">Illinois</STATE>
<STATE abbr="IN">Indiana</STATE>
<STATE abbr="IA">Iowa</STATE>
<STATE abbr="KS">Kansas</STATE>
<STATE abbr="KY">Kentucky</STATE>
<STATE abbr="LA">Louisiana</STATE>
<STATE abbr="ME">Maine</STATE>
<STATE abbr="MD">Maryland</STATE>
<STATE abbr="MA">Massachusetts</STATE>
<STATE abbr="MI">Michigan</STATE>
<STATE abbr="MN">Minnesota</STATE>
<STATE abbr="MS">Mississippi</STATE>
<STATE abbr="MO">Missouri</STATE>
<STATE abbr="MT">Montana</STATE>
<STATE abbr="NE">Nebraska</STATE>
<STATE abbr="NV">Nevada</STATE>
<STATE abbr="NH">New Hampshire</STATE>
<STATE abbr="NJ">New Jersey</STATE>
<STATE abbr="NM">New Mexico</STATE>
<STATE abbr="NY">New York</STATE>
<STATE abbr="NC">north Carolina</STATE>
<STATE abbr="ND">north Dakota</STATE>
<STATE abbr="OH">Ohio</STATE>
<STATE abbr="OK">Oklahoma</STATE>
<STATE abbr="OR">Oregon</STATE>
<STATE abbr="PA">Pennsylvania</STATE>
<STATE abbr="RI">Rhode Island</STATE>
<STATE abbr="SC">South Carolina</STATE>
<STATE abbr="SD">South Dakota</STATE>
<STATE abbr="TN">Tennessee</STATE>
<STATE abbr="TX">Texas</STATE>
<STATE abbr="UT">Utah</STATE>
<STATE abbr="VT">Vermont</STATE>
<STATE abbr="VA">Virginia</STATE>
<STATE abbr="WA">Washington</STATE>
<STATE abbr="WV">West Virginia</STATE>
<STATE abbr="WI">Wisconsin</STATE>
<STATE abbr="WY">Wyoming</STATE>
</STATELIST>

解决方法

最简单的方法是制作哈希 – 不需要任何功能.
var states = {
    'AL': 'Alabama','AK': 'Alaska','AZ': 'Arizona','AR': 'Arkansas','CA': 'California','CO': 'Colorado','CT': 'Connecticut',...
    'WY': 'Wyoming'
};

var stateName = states["WY"];

编辑

现在我更好地理解getState()需要从服务器检索状态名称.这使您进入异步编码的世界,这与正常的同步编码完全不同.

要实现的最重要的事情是getState()不能简单地返回给定状态缩写的状态名称.为什么?因为对服务器的ajax调用是异步的 – 换句话说,getState()不会在返回之前等待服务器的响应.

基本上有两种处理异步性的方法:

>将回调函数传递给getState(),告诉它在收到响应时该怎么做
>安排getState()返回一个特殊类型的对象,称为“promise”,可以在调用getState()的地方处理,以便在服务器响应时它会响应.

以下代码采用第二种方法.

var states = {};//cache of state names,with state abbreviations as keys
function getState(abbr) {
    var dfrd = $.Deferred();//A deferred object,whose promise will be returned.
    if(!states[abbr]) {
        $.ajax({
            url: "states.asp",dataType: 'XML',success: function(data) {
                //Load up the cache
                $.each($('state',function(i,el) {
                    states[el.attr('abbr')] = $(el).text();
                });
                //Now resolve or reject the deferred object depending in whether states[abbr] has been cached
                if(states[abbr]) {
                    dfrd.resolve(abbr,states[abbr]);//Success! Let's resolve the deferred object (and its promise).
                }
                else {
                    dfrd.reject(abbr,'States successfully downloaded but ' + abbr + ' was not included');
                }
            },error: function() {
                dfrd.reject(abbr,'Download of states Failed');
            }
        });
    }
    else {
        //The state name is already cached
        //The deferred object (and its promise) can be resolved without needing to make another ajax call.
        dfrd.resolve(abbr,states[abbr]);
    }
    return dfrd.promise();
}

未经测试

现在您需要知道的是如何调用getState().

getState("WY").done(function(abbr,state) {
    alert(abbr + ': ' + state);
    //other stuff here
}).fail(function(abbr,message) {
    alert(abbr + ': ' + message);
    //other stuff here
});

如您所见,您希望getState()返回的值现在显示为.done()函数的第二个参数.为了更好地衡量,缩写(“WY”)显示为第一个参数.

如果你想处理错误条件(总是一个好主意),那么在.fail()回调中这样做.

请参阅代码中的注释,以获取有关一切如何工作的更多线索.

在Javascript中返回一个字符串的更多相关文章

  1. 如何使用Firebase在iOS上验证用户的电子邮件地址?

    我坚持使用firebase进行电子邮件验证.我四处寻找指导但没有帮助.在用户验证他的电子邮件后,我的代码仍然打印出用户尚未验证.我还在尝试习惯firebase的语法.这是我的代码:这是我注册部分的代码:解决方法您在签名之前检查了用户电子邮件是否已经过验证.这对我有用.

  2. xcode – UIAlertController Segue到不同的页面(Swift)

    我能够为我的按钮编写一个UIAlertController,它工作正常,但是当我按下YES或OK按钮时,我不知道如何切换到不同的页面.目前,YES或OK按钮无处可去.解决方法您可以在故事板中创建一个segue,控制从场景顶部的黄色视图控制器拖动到新的视图控制器.然后在检查器中为该segue指定一个标识符.您可以从代码中的处理程序中调用它.

  3. ios – 使用Swift实现应用内邮件失败

    我想使用swift来实现应用内电子邮件.当我点击按钮时,会弹出电子邮件窗口.但是,我无法发送电子邮件.此外,点击取消删除草稿后,我无法返回到原始屏幕.解决方法由于您尚未将当前视图控制器设置为myMail的mailComposeDelegate,因此未调用mailComposeController:didFinishWithResult方法.初始化myMail后,请确保添加:你会很好的去

  4. iOS Swift – 如何以编程方式为所有按钮指定默认操作

    除非通过界面生成器或以编程方式分配其他操作,否则如何为UIButton分配默认操作以显示警报?解决方法那么你想要实现的目标是什么.我已经使用UIViewController扩展并添加了一个闭包作为没有目标的按钮的目标.如果按钮没有动作,则会显示警报.我测试了它.希望这可以帮助.快乐的编码.

  5. iOS如何在任何地方点击UIAlertView?

    我想通过一键轻松将UIAlertView的任何地方关掉.我想显示一个UIAlertView没有任何按钮.我在这里有标准的UIAlertView代码,但我需要输入如何解除它,如果可能的话.用UITouch?

  6. ios – 扩展UIAlertController方便初始化警告

    当我定义一个UIAlertController方便初始化器时:并在我的UIViewController子类中的按钮操作中使用它:然后单击模拟器上的那个按钮,我收到一个警告:Attemptingtoloadtheviewofaviewcontrollerwhileitisdeallocatingisnotallowedandmayresultinundefinedbehavior(UIAlertCo

  7. ios – UIAutomation:任何方式来解雇“想使用您当前的位置”提醒?

    我的应用程序正在使用位置服务,而对于自动测试,我想要能够解除“APP想要使用当前位置”弹出窗口.但是,当我尝试使用UIAutomation脚本在Instruments中执行此操作时,我会收到此错误:这样做是有道理的,因为警报是由不同的过程产生的.但是,在这种情况下,苹果计划如何帮助人们自动化测试?

  8. ios – 如何在警报控制器的文本框中设置数字键盘[swift]

    我试图呼叫一个具有文本字段的警报控制器.但是我想立即显示数字键盘,因为用户只能输入数字.我尝试了以下,但它不工作.解决方法发现自己!这可能对别人有用.

  9. ios – AlertController不在窗口层次结构中

    我该怎么办?

  10. ios – 我可以检查现在是否有任何UIAlertView显示?

    我找到了这段代码但它是私有API,我的应用程序可能会被Apple拒绝.有没有合法的方法来做到这一点?解决方法对于低于iOS7的设备:–当您创建UIAlertView的主体时,[alertViewShow]会在主窗口中添加子视图.因此,要检测UIAlertView,您只需检查当前UIView的子视图,因为UIAlertView继承自UIView.编辑:–适用于使用iOS7的设备和注意:–如果您不能使用第三方API,那么iOS7中唯一真正的选项是实际跟踪您的警报视图.

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部