HTTP请求的标头中是否有任何内容可以区分AJAX调用和来自给定客户端的直接浏览器请求?用户代理字符串通常是否相同?
我想了解XMLHttpRequest如何在Javascript中工作的低级细节,但是我没有幸运地在Rhino或V8代码中找到实现代码.我对这两个项目中的代码都不熟悉,所以我可能不会找到合适的位置.
在任何地方都有可用的开源实现吗?
我试图通过拖放上传大文件.我有这段Javascript代码:
xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('X-File-Name', file.name);
xhr.setRequestHeader('X-File-Size', file.size);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);
Run Code Online (Sandbox Code Playgroud)
where url是一个目标url的字符串,file是一个文件拖放后检索Blob到的(根据http://www.w3.org/TR/XMLHttpRequest2/#the-send-method).此代码适用于Chrome 12,Safari 5和Firefox 4,并在HTTP请求正文中发送文件的原始内容.
但是,如果文件足够大,则永远不会发送请求.相反,XMLHttpRequest对象触发和错误事件(没有任何有用的消息).在我的环境中,此限制为86Mb,但因机器而异.
Chrome的javascript控制台显示以下消息:
POST http://localhost/xfiles/xfiles.php undefined (undefined)
Run Code Online (Sandbox Code Playgroud)
这与我的代码无关(与较小的文件完美配合).
浏览器似乎在内存中并在发送之前读取整个文件.可能有一个内存不足的异常或类似的东西会停止进程.在任何情况下,都没有发送HTTP请求,因此可以肯定服务器的限制与此问题无关.
无论如何,阅读整个文件是浪费资源.
是否有任何方法以流方式逐字节发送文件,而不必先将其存储在内存中?
我正在使用已经正常工作的JAX-RS上的Web服务.现在我正在寻找捕获一些异常的方法,以便向用户发送带有自定义消息的40X错误.
我有一个Web服务和一个ExceptionMapper.
这是我的网络服务:
@Path( value = "/test/")
public interface ServiceTest {
@Path(value = "{rrf}")
@GET
@Produces(MediaType.TEXT_XML)
public ObjectDTO getDealer(@PathParam("rrf") String rrf){
ObjectDTO objectDTO = new ObjectDTO();
if( verifyRRFSintax(rrf) ) {
//Get the objet, this part works fine
} else {
throw new IllegalArgumentException("Custom message");
}
return dwsDTO;
}
private boolean verifyRRFSintax(String rrf) {
return rrf.matches("[0-9]{8}");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的ExceptionMapper
@Provider
@Produces(MediaType.TEXT_XML)
public class IllegalArgumentExceptionMapper
implements ExceptionMapper<IllegalArgumentException> {
@Override
public Response toResponse(IllegalArgumentException e) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是它在application-context.xml文件中的注册方式
<bean id="serviceTest" class="ServiceTest"/> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用XMLHttpRequest 2级支持进度事件来实现HTML5方式的上传进度条.
在您看到的每个示例中,方法是向progress事件添加事件侦听器,如下所示:
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = Math.round(event.loaded * 100 / event.total);
console.log(percentComplete);
}
}, false);
Run Code Online (Sandbox Code Playgroud)
这些示例似乎总是假设event.lengthComputable将为true.毕竟,浏览器肯定知道它发送的请求的长度?
无论我做什么,event.lengthComputable都是false.我已经在Safari 5.1.7和Firefox 12上测试了这两个,这两个都在OSX上.
我的网站是使用Django构建的,我在开发和生产设置上遇到了同样的问题.
我用来生成表单上传的完整代码如下所示(使用jQuery):
form.submit(function() {
// Compile the data.
var data = form.serializeArray();
data.splice(0, 0, {
name: "file",
value: form.find("#id_file").get(0).files[0]
});
// Create the form data.
var fd = new FormData();
$.each(data, function(_, item) {
fd.append(item.name, item.value);
});
// Submit the data.
var req = new XMLHttpRequest();
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = …Run Code Online (Sandbox Code Playgroud) 我有一个Play 2.0.1应用程序,我想使用托管在其他域上的Javascript调用.我的Javascript调用失败了:
Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我已经找到了一些如何在Play 1中设置正确的HTTP标头的例子,但是没有为Play 2.0.1找到任何东西.在阅读文档(http://www.playframework.org/documentation/2.0.2/JavaResponse)之后,我尝试了以下方法以使工作正常:
public static Result myJsonWebService() {
...
response().setHeader("Access-Control-Allow-Origin", "*");
return ok(toJson(jsonObject));
}
Run Code Online (Sandbox Code Playgroud)
但我的JS Web服务调用仍然失败.
为了让这个工作,我需要做什么?
我有一大块json需要发布到自托管的ASP.Net Web API服务.
我收到" 状态代码:413请求实体太大 "消息.
试图将以下内容放在webapi服务项目的app.config中.
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
<httpRuntime
maxRequestLength="2147483647"
executionTimeout="300" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
这没有用.
我正在考虑以下两个选项.
我更喜欢第二种选择,但尚未找到如何实现它.
有什么指针吗?
我正在构建一个使用Caspio API的应用程序.我在对其API进行身份验证时遇到了一些问题.我花了2-3天试图解决这个问题,但这可能是由于对我的一些了解.我已经在stackoverflow帖子上阅读了无数文章,但没有解决问题.下面是我的解决方案的代码示例,基于我所看到的,我得到400状态代码消息; 我在这做错了什么?(请提供很好的注释代码示例,我宁愿不要在这里发布的链接引用其他材料我已经看过这些广泛谢谢!):
我看过一些参考文献:
2)如何在javascript的REST API调用中进行http认证
我想使用下面的caspio描述的这种身份验证方法:
作为在请求主体中包含凭证的替代方法,客户端可以使用HTTP基本身份验证方案.在这种情况下,将按以下方式设置身份验证请求:
方法: POST
URL: 您的令牌端点
正文: grant_type = client_credentials
标头参数:
授权:基本的基本认证领域
以下是我的Javascript和HTML代码.
JavaScript的:
var userName = "clientID";
var passWord = "secretKey";
function authenticateUser(user, password)
{
var token = user + ":" + password;
// Should i be encoding this value????? does it matter???
// Base64 Encoding -> btoa
var hash = btoa(token);
return "Basic " + hash;
}
function CallWebAPI() {
// New XMLHTTPRequest …Run Code Online (Sandbox Code Playgroud) 我尝试向GETjQuery AJAX请求中的某个链接发送一个简单的请求.
这是一个非常简单的:
$.ajax({
type: 'GET',
url: /* <the link as string> */,
dataType: 'text/html',
success: function() { alert("Success"); },
error: function() { alert("Error"); },
});
Run Code Online (Sandbox Code Playgroud)
然而,无论我尝试过什么,我都得到了 XMLHttpRequest cannot load <page>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7776' is therefore not allowed access.
我什么都试过,从加入header : {}定义的AJAX请求设置dataType到JSONP,甚至text/plain,用的,而不是简单的jQuery AJAX,甚至下载一个插件,使CORS -但没有什么能帮上忙.
如果我试图访问任何其他网站,也会发生同样的情况.
有关正确和简单解决方案的任何想法?有没有?
当执行"GET"的要求,xhr.response并且xhr.responseText都返回相同的值.有什么不同?有没有?
xmlhttprequest ×10
javascript ×8
ajax ×4
http-headers ×2
c# ×1
cors ×1
java ×1
jax-rs ×1
jquery ×1
json ×1
rhino ×1
streaming ×1
upload ×1
v8 ×1
xml ×1