Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用dojo post请求登录外部服务器_Javascript_Login_Dojo - Fatal编程技术网

Javascript 使用dojo post请求登录外部服务器

Javascript 使用dojo post请求登录外部服务器,javascript,login,dojo,Javascript,Login,Dojo,我正在尝试用dojo编写一个登录函数。在我的情况下,我需要一个到外部(!!)服务器的post请求在这种情况下: 登录定义如下: 登录 登录是一种特殊操作,不处理任何数据,而是验证用户。将发出POST请求,其中包含一个json对象,其键为“email”和“password”。返回值为true或false。返回一个特殊的Cookie以供进一步识别 有效的API调用 URL:/api/登录 方法:邮寄 字段: 电子邮件 密码 说明:以PLIST格式返回登录用户的所有数据。如果登录失败,将以PLIST格

我正在尝试用dojo编写一个登录函数。在我的情况下,我需要一个到外部(!!)服务器的post请求在这种情况下:

登录定义如下:

登录

登录是一种特殊操作,不处理任何数据,而是验证用户。将发出POST请求,其中包含一个json对象,其键为“email”和“password”。返回值为true或false。返回一个特殊的Cookie以供进一步识别

有效的API调用

URL:/api/登录

方法:邮寄

字段:

电子邮件

密码

说明:以PLIST格式返回登录用户的所有数据。如果登录失败,将以PLIST格式返回false

我试图通过io.iframe.send调用来解决这个问题,但我得到了以下错误:错误:访问属性“getElementsByTagName”的权限被拒绝

然而,我甚至不确定io.iframe是否是解决问题的正确方法

也许你能帮助我 非常感谢

PS:我当前的代码如下所示:

function login(){
    require(["dojo/io/iframe", "dojo/dom"], function(iframe, dom){
        var email = dom.byId("logEmail").value;
        var password = dom.byId("logPassword").value;

        function JSONreq(){

            var jsonpArgs = {
                method: 'POST',
                handleAs:"json",
                content:{
                    email: email,
                    password: password

                },
                url: "http://---someServerThatIDontWantToName---/api2/login",
                load: function (response, ioargs){
                    //console.log(response)
                    alert('succes');
                },
                error: function(response, ioargs){
                    alert("error");
                }
            };
            iframe.send(jsonpArgs);
        }
        dojo.ready(JSONreq);

    });
};

移动发展有什么不同吗?跨服务器post请求应该可以在移动设备上进行


因此:出于这个原因,我可以使用io.iframe.send吗?

您可以使用目标iframe向另一个域发送POST请求,但不能从该iframe读取任何属性或DOM节点


XHR2
,但并非所有浏览器都支持它,服务器应该返回特定的头。我不确定你是否可以通过XHR2发送POST。

简而言之,你不能在任何时候通过浏览器客户端在X域上使用POST请求。原因是,DOM在另一个命名空间上受到保护,并且通过io发生的事情是

  • 建立GET请求
  • 查找表单,如果存在(远程)输入,则检查foreach(本地)名称/值内容密钥对
    • 如果不存在,则按如下方式创建:
      dojo.create(“输入”,{type:“隐藏”,name:name,value:value},fn)
    • 否则,请在form.element-of-name上设置值
  • 因此,首先,由于安全限制,DOM查找将在2)中失败,这意味着“不存在”,然后反过来,2.1)dojo.create将以相同的原因失败

    典型的解决办法是

  • 在x-domainserver/api/login中打开GET方法(设置url:prefix+dojo.formToQuery(表单)
  • 创建一个url在轮询间隔内刷新,使登录保持活动状态
  • 在samehost服务器/api/login/passthrough上创建一个“jumphost”,服务器端通过它发布到x-domainserver/api/login,然后返回结果

    $allowedDomains=数组( "http://facebook.whatever.org/", "http://yournavigation.org/”

    //x域上的目标请求uri,如“表单操作” $action=$_请求[“url”]

    //方法只查找POST和GET默认值 $method=$_请求[“method”]

    //通过滚动_请求填充的查询占位符将附加除方法/url对以外的所有对 $fields=“”

    //授权禁止任何婚姻或死亡

    foreach($allowedDomains作为$domain){

    }

    如果(计数($_请求)>2){

    } $fields=substr($fields,0,strlen($fields)-1)

    //设置卷曲 $ch=curl_init(); if(strtoupper($method)=“POST”){ curl_setopt($ch,CURLOPT_URL,$action); 卷曲设置($ch,卷曲设置桩,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields); }否则{ curl_setopt($ch,CURLOPT_URL,$action.?“$fields);
    } curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_USERAGENT,“transport.php(curl)”)

    //发送、捕获返回的响应并关闭 $response=curl\u exec($ch); $info=curl\u getinfo($ch); 卷曲关闭($ch)

    //回复对客户端XHR的响应 标题(“内容类型:”.$info[“内容类型”]); 回音$应答


  • 您可以使用jsonp或调用您的域,并通过URL发送参数。不幸的是,这些帖子对我帮助不大……当我告诉您这将是一个移动应用程序时,也许它对您有所帮助。我使用的是dojo和phonegap。我的get请求工作正常,但登录文档显示,我需要一个post请求才能最终登录。
    if (strpos(substr($action, 0, strlen($domain)), $domain) !== false) {
    header("HTTP/1.0 403 Forbidden");
    die("Domain name "".$action."" not allowed. Access denied.");
    flush();
    }
    
    foreach ($_REQUEST as $key => $value) {
    
        if ($key != "url" && $key != "method") // append anything but url and method
            $fields .= $key . "=" . rawurlencode($value) . "&";
    }