标签: xmlhttprequest

如何在rails下的webrick中设置access-control-allow-origin?

我已经编写了一个小型rails应用程序,通过xmlhttprequests向另一个站点提供内容,这些站点将在另一个域上运行(无法让它们在同一台服务器上运行).我知道我需要在我的rails服务器上设置access-control-allow-origin,以允许请求的网页访问这些资料.

似乎有很好的文档说明如何使用Apache,这可能是我部署网站后将使用的服务器.虽然我正在开发,但我希望只使用webrick,因为我习惯使用rails.有没有办法配置webrick以在rails中提供适当的http标头?

ajax ruby-on-rails xmlhttprequest webrick cors

34
推荐指数
6
解决办法
3万
查看次数

超时XMLHttpRequest

如何在以下脚本中添加超时?我希望它将文本显示为"超时".

var bustcachevar = 1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects = ""
var rootdomain = "http://" + window.location.hostname
var bustcacheparameter = ""

function ajaxpage(url, containerid) {
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest()
    else if (window.ActiveXObject) { // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        } catch (e) {
            try {
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            } catch (e) {}
        }
    } …
Run Code Online (Sandbox Code Playgroud)

timeout xmlhttprequest

33
推荐指数
1
解决办法
8万
查看次数

使用jQuery在函数中返回$ .get数据

我正在尝试调用包含jQuery代码的函数.我希望这个函数返回jQuery语句的结果.它没有用,我正在试图找出原因.

function showGetResult (name) {
    var scriptURL = "somefile.php?name=" + name;
    return $.get(scriptURL, {}, function(data) { return data; });
}

alert (showGetResult("John"));
Run Code Online (Sandbox Code Playgroud)

警报显示" [object XMLHttpRequest]." 但是,如果我在函数之外单独运行jQuery语句,它可以正常工作 - >$.get(scriptURL, {}, function(data) { alert(data); })

我希望能够通过将其放在返回$.get数据的函数内来重用此代码.我在这里犯了什么根本错误?

jquery xmlhttprequest

33
推荐指数
3
解决办法
8万
查看次数

在IE 8/9中回退FormData

在IE 8/9中不存在FormData,但我需要在这些浏览器中使用该功能.这有一个很好的后备吗?

我会尝试发送json数据,但我需要将文件传递给服务器.我将此文件附加到formData现代浏览器中,只需提交XHR请求即可.因为FormData在IE 8/9中不存在,这显然是失败的.

// I cant seem to get this to work with a file.
$.ajax({
    url: '/genericHandlers/UploadDocsFile.ashx',
    type: "POST",
    data: model.toJSON(),
    contentType: 'application/json'
    }).done(function  (data) { 
       log('stuff happened!');
    });
Run Code Online (Sandbox Code Playgroud)

也许另一种方法是在js中创建一个假的表单对象然后将数据附加到那个?

javascript ajax xmlhttprequest fileapi

32
推荐指数
1
解决办法
4万
查看次数

缓存的非CORS响应与新的CORS请求冲突

要旨:

我有一个页面使用标签加载来自s3(HTML img标签)的图像,我有一个使用的页面xmlhttprequest.标记加载在没有CORS头的情况下被缓存,因此xmlhttprequest看到缓存版本,检查它的标题并失败并发生交叉原始错误.

细节:

编辑:safari 5.1.6和chrome 21.0.1180.89都失败.在Firefox 14中正常工作.

使用S3的新CORS,我设置CORSRule如下:

<CORSRule>
  <AllowedOrigin>*</AllowedOrigin>
  <AllowedMethod>GET</AllowedMethod>
  <AllowedMethod>HEAD</AllowedMethod>
  <MaxAgeSeconds>0</MaxAgeSeconds>
  <AllowedHeader>*</AllowedHeader>
</CORSRule>
Run Code Online (Sandbox Code Playgroud)

如果我在没有在请求标头中设置原点的情况下从S3请求图像,我会在响应中返回没有任何CORS标头的图像.

这个get的缓存和随后的CORS请求(一个在请求头中设置起源的请求)被拒绝,因为浏览器使用非CORS版本形成缓存.

解决这个问题的最佳方法是什么?我可以设置一些东西,以便非CORS版本永远不会被缓存吗?我应该通过将a附加?some_flag到请求的URL来区分CORS请求吗?

理想情况下,即使请求不包含"origin",我也总是会发回所需的CORS头.

caching xmlhttprequest amazon-s3 cors

32
推荐指数
2
解决办法
4182
查看次数

如何从xhr.responseText获取"数据"字段?

我有XMLHttpRequest()以下功能

var searchFriendRequests = function (userid) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:6344/api/Registeration/searchFriendrequests?userid=' + userid, false);
    xhr.setRequestHeader("Content-Type", "text/xml");
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                var data = xhr.responseText;
            }
        }
    };
    xhr.send(null);
}
Run Code Online (Sandbox Code Playgroud)

其中xhr.responseText返回值为

{
    "$id": "1",
    "ContentEncoding": null,
    "ContentType": null,
    "Data": [
        {
            "$id": "2",
            "email": "anu@gmail.com"
        },
        {
            "$id": "3",
            "email": "anu@gmail.com"
        }
    ],
    "JsonRequestBehavior": 1,
    "MaxJsonLength": null,
    "RecursionLimit": null
}
Run Code Online (Sandbox Code Playgroud)

我如何从中获得该Data领域 …

javascript jquery xmlhttprequest

31
推荐指数
2
解决办法
7万
查看次数

Chrome DevTools:从XHR网络请求跳转到创建它的代码

我想调试一个REST API,看看它是如何从非常复杂的客户端代码中使用的.在"网络"选项卡中识别AJAX请求后,如何转到创建它的代码?

在此输入图像描述

不可能吗?

javascript xmlhttprequest google-chrome-devtools

31
推荐指数
2
解决办法
7829
查看次数

jQuery AJAX在窗口卸载时触发错误回调 - 如何过滤掉卸载并仅捕获真正的错误?

如果我离开$ .ajax()请求中间的页面,则会触发错误回调.我已经在Safari和FF中测试了GET和POST请求.

一个可能的解决方案是在页面卸载时中止所有AJAX请求,但是在卸载之前调用错误处理程序,所以这似乎不可能.

我希望能够通过礼貌警报或模态对话框在客户端优雅地处理诸如500s之类的REAL错误,但我不希望在用户离开页面时调用此处理.

我该怎么做呢?

-

(也很奇怪:当离开页面时,错误处理程序说textStatus参数是"错误",与接收500 /错误请求时抛出相同.)

javascript ajax jquery xmlhttprequest

30
推荐指数
2
解决办法
7844
查看次数

如何使Microsoft XmlHttpRequest荣誉缓存控制指令

我正在使用MSXML的XmlHttpRequest对象发出请求:

IXMLHttpRequest http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).并且Process Monitor显示文件实际上是从我的缓存中提供的:

在此输入图像描述

所以我想指示XmlHttpRequest用户代理任何超过0秒的缓存内容都太旧了.执行此操作的标准方法是添加请求标头:

Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

发送请求:

http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.setRequestHeader("Cache-Control", "max-age=0");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).Process Monitor显示文件实际上是从我的缓存中提供的.

那有什么不对?是max-age不是在做什么我想它呢?

来自RFC 2616 - 超文本传输​​协议,第14部分:标题字段定义:

其他指令允许用户代理修改基本过期机制.可以在请求中指定这些指令:

max-age
表示客户端愿意接受年龄不大于指定时间(秒)的响应.除非还包括最大指令,否则客户不愿意接受陈旧的响应.

这正是我想要的.

Cache-Control: max-age=0不是我想要的,或者是MSXML的XmlHttpRequest对象错误?

更新一

这是MSXML XmlHttpRequestCOM对象:

  • CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
  • ProgID:Msxml2.XMLHTTP.6.0

更新二

max-age指令由客户端添加,以供所有要遵守的缓存使用.来自RFC:

Cache-Control通用头字段用于指定请求/响应链中的所有缓存机制必须遵守的指令 …

msxml xmlhttprequest cache-control

30
推荐指数
2
解决办法
3万
查看次数

安全通道支持发生错误 - 经典ASP HTTP请求

我有一个在Windows Server 2012上运行的经典ASP网站.一个页面使用以下代码通过https向另一个应用程序发出HTTP请求:

Sub ShopXML4http(url, inStr, outStr, method, xmlerror)
  Dim objhttp
  Set objhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
  objHttp.open method, url, false
  If Method="POST" Then
    objHttp.Send instr
  Else
    objHttp.Send
  End if   
  outstr=objHttp.responseText
  Set objhttp=nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

这段代码几乎在所有时间都可以正常工作(每天数千个请求),但偶尔会出现这样的消息:

编号:-2147012739

说明:安全通道支持发生错误

来源:msxml6.dll

该应用程序最近从旧的Windows 2003 Server迁移到2012 Server,这个问题在旧服务器上似乎永远不会出现问题.此外,虽然这个错误发生在网站上,我可以在VBScript中运行完全相同的代码,它工作正常.重置应用程序池似乎导致站点能够再次执行安全HTTP请求(尽管它经常在我到达服务器之前修复自己).

iis xmlhttprequest asp-classic windows-server-2012

30
推荐指数
5
解决办法
4万
查看次数