【问题标题】:Synchronous cross-domain request?同步跨域请求?
【发布时间】:2012-12-29 01:29:52
【问题描述】:

我需要从 html 页面向不同域中的 web 服务接口发送请求。有时,需要同步请求。例如:用用户名和密码登录,webservice确认后得到响应。

但是,我使用了jsonp,发现它无法进行同步请求。 (html页面和webservice都在我的控制之下)

有什么好主意吗?提前致谢。

【问题讨论】:

  • 为什么需要同步?可以根据响应使用请求的成功回调来执行下一步
  • @charlietfl 我尝试使用成功回调,但根本没有响应。 ajax方法在webservice设置值之前返回未定义的值
  • 显示更多代码,如果没有看到你在做什么,最后的评论没有意义
  • @charlietfl function login() { var result; $.ajax({ async: false, url: KnutBase.getServiceUrl() + "ServiceInterface/HmsPlannerWebService.asmx/AuthenticateLogin", data: { username: username, password: password }, dataType: 'json', success: function (response ) { 结果 = response.result; } });返回结果; }
  • 代码应该被添加到代码块中的分析器中,在那里它是可读的,并且便于阅读问题的人看到它......你不能从函数返回 AJAX 值。没有正确使用回调

标签: jquery asp.net ajax web-services cordova


【解决方案1】:

如果您发送标头('Access-Control-Allow-Origin: *'),您可以只使用标准的非异步 $.ajax 对象。

<?php
    header('Access-Control-Allow-Origin: *');
?>
<html>
...
</html>
<script type="text/javascript">
    $(document).ready( function()
    {
        $("#someID").on('click', function()
        {
            var username = 'username';
            var passwd = 'password';

            $.ajax(
            {
                type:'post,
                dataType:'json',
                url:'http://yoursite.com/web-service.php',
                data:{username:username,password:passwd},
                async:false,
                success:function(data){},
                error:function(jqXhr, textStatus, errorThrown){}
            });
        });
    });
</script>

【讨论】:

  • 嗨,丹,感谢您的帮助。我注意到了CORS。在我的 asp.net 网络服务中,我尝试这样做:编辑 web.config,添加标签 但是,它不起作用。有什么地方错了吗?
  • 在 ASP 中是 Response.AppendHeader("Access-Control-Allow-Origin", "*");
【解决方案2】:

async:false 已被弃用,这是有充分理由的。

您的登录函数需要重构,以便您在成功回调中使用响应数据。

您的代码需要执行以下操作:

$.ajax({
    /* other options*/
     success:function( response){
          if( response.status=='ok'){
             /* run sucessful login code*/
          }else{
             /* message to user*/
          }
     }

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2017-06-15
    • 2013-03-06
    • 2019-12-01
    相关资源
    最近更新 更多