Ext.Ajax.Request 在浏览器中不起作用
Posted
技术标签:
【中文标题】Ext.Ajax.Request 在浏览器中不起作用【英文标题】:Ext.Ajax.Request not working in Browser 【发布时间】:2013-07-09 07:48:05 【问题描述】:Ext.Ajax.Request 似乎不适用于我的桌面网络浏览器。它在设备和 xcode 模拟器上运行良好,但在桌面网络浏览器上,它调用失败方法。代码如下:
// send ajax request
Ext.Ajax.request(
url: 'http://testapp.cloudapp.net/index.php/api/accounts/login/',
method: 'POST',
params:
username: Ext.getCmp('username').getValue(),
password: Ext.getCmp('password').getValue()
,
dataType: 'json',
success : function(response, request)
if(response.responseText == true)
Ext.Msg.alert('validated');
// animate to wall view
Ext.Viewport.animateActiveItem(targetView, type : 'fade' );
//destroy Login and Register Views
var vwRegister = Ext.ComponentQuery.query('register')[0],
vwLogin = Ext.ComponentQuery.query('login')[0];
setTimeout( function()
vwRegister.destroy();
vwLogin.destroy();
, 2000);
else
Ext.Msg.alert('invalid user');
,
failure: function(response, request)
Ext.Msg.alert('error');
);
我不认为这与“同源策略”有关,因为我尝试使用 jQuery 的 $.ajax 函数做同样的事情并且效果很好。
【问题讨论】:
是的,这是同源策略。看看Ext.data.JSONP
。
使用像 XAMPP 这样的本地网络服务器
【参考方案1】:
检查您的调试控制台,您很可能会看到关于同源策略的错误。
如果没有其他方法,请尝试使用 --disable-web-security 选项打开 chrome 看看是否有帮助。
请参阅this question 了解确切的语法。
祝你好运,布拉德
【讨论】:
这行得通,但@Even Trimboli 是对的,如果您可以控制api,JSONP 是正确的方法。我很遗憾没有在我的应用中使用 JSONP。【参考方案2】:虽然不是特别安全或不推荐,但您也可以在禁用网络安全功能(如同源策略)的状态下启动 Chrome 等浏览器。
对于 Windows...
chrome.exe --disable-web-security
对于 Mac...
Chrome.app --args --disable-web-security
由于我不是每次都特别喜欢使用终端,您可以编写一个 bash 脚本来为您完成,或者在 Mac 上使用 automator。
另外,请确保浏览器尚未运行,否则这将不起作用。
【讨论】:
以上是关于Ext.Ajax.Request 在浏览器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Ext.ajax.request 不能在 jsonData 中使用 0
在 Chrome 中超时 Ext.Ajax.request 后未捕获的异常
Ext.Ajax.request 是不是有任何 response.status 代码列表?