2012-08-23 60 views
0

我在ASP.NET MVC应用程序的顶部继承了一些EXTJS代码,并试图追踪Ext.msg.prompt框有一个错误字符串前面有一个“:”字符。这里的错误似乎发生的方法:以冒号字符开头的EXTJS方法出错字符串

var casePrompt = function() { 
    Ext.Msg.prompt("Numb", "", function(btn, text) { 
     if (btn == "ok") { 
      numbID = text.trim().toUpperCase(); 
      Ext.Ajax.request({ 
       url: "/location/method/" + numbID, 
       method: "GET", 
       callback: function(options, success, response) { 
        var reply = Ext.decode(response.responseText); 
        if (success) { 
         listOpen(reply.Data); 
        } else { 
         errorMsg(reply, function(button, text) { numbID = ""; }); 
        } 
       } 
      }); 
     } 
    }); 
}; 

如果一个数字进入框中的预期,一切工作正常。但是,如果有人输入相同的号码或任何有效的号码,并在其前面带有“:”,则该方法在返回控制器之前会出错。该错误只说:“Microsoft JScript中的编译错误:语法错误”,并强调将下面的代码EXT-ALL-debug.js:

doDecode = function(json){ 
    return eval("(" + json + ;)'); 
} 

有没有人见过这个,知道的办法赶上这个错误?我试图在VS2010中顺利完成此操作,但没有任何运气。

谢谢!

+1

获取该json变量的值,我猜这个问题很明显 - 可能是服务器的格式错误的json响应。 如果这是一个数字字段,而不是一个字符串,客户端和服务器应该在这里真的做一些验证! 也许服务器在响应正文(纯文本或html)中发送错误消息,这就是为什么doDecode失败。 – mistaecko

+0

是的,基本上没有错误处理的文本字符串,所以它只是通过无论放入什么。我同意这需要在多个层面进行验证。嗯。 – ewomack

+0

也许值不包含在引号中?那么':234324'肯定会抛出一个错误,如果进入doDecode。 '(:234324)'不合法的Javascript,'“(:234324)”'是(因为它只是一个字符串)! – mistaecko

回答

0

我最终只是在文本字符串上使用正则表达式进行验证,以捕获与有效字符不匹配的任何内容。这照顾了冒号和任何其他字符,所以mistaecko是正确的,它需要客户端验证。这似乎解决了这个问题。谢谢您的意见!

相关问题