遇到麻烦我认为是一个相对简单的jQuery插件...
该插件应该通过ajax从php脚本中获取数据,以便为a添加选项<select>.ajax请求非常通用:
$.ajax({
url: o.url,
type: 'post',
contentType: "application/x-www-form-urlencoded",
data: '{"method":"getStates", "program":"EXPLORE"}',
success: function (data, status) {
console.log("Success!!");
console.log(data);
console.log(status);
},
error: function (xhr, desc, err) {
console.log(xhr);
console.log("Desc: " + desc + "\nErr:" + err);
}
});
Run Code Online (Sandbox Code Playgroud)
这似乎在Safari中运行良好.在Firefox 3.5中,REQUEST_TYPE服务器上的"OPTIONS"始终为"OPTIONS",并且不会显示$ _POST数据.Apache将请求记录为"OPTIONS"类型:
::1 - - [08/Jul/2009:11:43:27 -0500] "OPTIONS sitecodes.php HTTP/1.1" 200 46
Run Code Online (Sandbox Code Playgroud)
为什么这个ajax调用在Safari中工作,而不是Firefox,以及如何为Firefox修复它?
Response Headers Date: Wed, 08 Jul 2009 21:22:17 GMT Server:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2 X-Powered-By: PHP/5.2.6 Content-Length 46 Keep-Alive timeout=15, max=100 Connection Keep-Alive Content-Type text/html …
登录$.ajax()到站点后,我尝试$.ajax()向该站点发送第二个请求 - 但是当我检查使用FireBug发送的标头时,请求中不包含会话cookie.
我究竟做错了什么?
我是Web应用程序和Servlet的新手,我有以下问题:
每当我在servlet中打印一些东西并通过webbrowser调用它时,它就会返回一个包含该文本的新页面.有没有办法使用Ajax在当前页面中打印文本?
有谁知道如何使用JavaScript或jQuery添加或创建自定义HTTP标头?
我已经使用jQuery和AJAX几周了,我看到了两种不同的方法来在调用完成后"继续"脚本:success:和.done.
从jQuery文档的概要我们得到:
.done():说明:添加要在解析Deferred对象时调用的处理程序.
success:(.ajax()option):请求成功时调用的函数.
因此,在AJAX调用完成/解决之后,两者都做了一些事情.我可以随机使用其中一个吗?有什么区别,什么时候使用而不是另一个?
我正在为朋友建立一个小型聊天应用程序,但不确定如何及时获取信息,而不是手动或基本上强制刷新页面.
目前,我正在使用简单的AJAX实现这一点,但这有一个缺点,即当一个短计时器过去时经常点击服务器.
在研究长/短轮询时,我遇到了HTML5 WebSockets.这似乎很容易实现,但我不确定是否存在一些隐藏的缺点.例如,我认为WebSockets仅受某些浏览器的支持.我应该注意WebSockets还有其他缺点吗?
既然两种技术似乎都做同样的事情,那么在哪种情况下,人们更愿意使用其中一种?更具体地说,HTML5 WebSockets使AJAX长/短轮询过时,还是有令人信服的理由更喜欢AJAX而不是WebSockets?
关于websocket和HTTP有很多博客和讨论,许多开发人员和网站都强烈支持websockets,但我仍然无法理解为什么.
例如(websocket爱好者的参数):
HTML5 Web套接字代表了Web通信的下一个发展 - 一种全双工双向通信通道,通过Web上的单个插槽运行.(http://www.websocket.org/quantum.html)
HTTP支持流媒体:请求正文流(您在上传大文件时使用它)和响应正文流.
在与WebSocket连接期间,客户端和服务器每帧交换2个字节的数据,而连续轮询时则为8千字节的http头.
为什么这2个字节不包括tcp和tcp协议开销?
GET /about.html HTTP/1.1
Host: example.org
Run Code Online (Sandbox Code Playgroud)
这是~48字节的http标头.
http chunked编码 - http://ru.wikipedia.org/wiki/Chunked_transfer_encoding:
23
This is the data in the first chunk
1A
and this is the second one
3
con
8
sequence
0
Run Code Online (Sandbox Code Playgroud)
这两个协议都可以在TCP上运行,因此所有与长期连接的TCP问题仍然存在.
题:
使用JQuery或任何其他类似框架从您的自定义URL/Web服务加载HTML内容非常容易.我多次使用这种方法,直到现在,发现性能令人满意.
但是所有的书籍,所有专家都试图让我使用JSON而不是生成HTML.它是如何比HTML更优越的?
它快得多吗?
它在服务器上的负载是否很小?
另一方面,我有一些使用生成的HTML的原因.
你是哪一方,为什么?
我注意到在jquery中使用$ .post()时默认的contentType是application/x-www-form-urlencoded - 当我的asp.net mvc代码需要有contentType = application/json
(请参阅此问题,为什么我必须使用application/json:ASPNET MVC - 为什么ModelState.IsValid为false"当该字段确实有值时,x字段是必需的?)
如何使$ .post()发送contentType = application/json?我已经有了大量的$ .post()函数,所以我不想改成$ .ajax(),因为它需要花费太多时间
如果我试试
$.post(url, data, function(), "json")
Run Code Online (Sandbox Code Playgroud)
它仍然有contentType = application/x-www-form-urlencoded.那么如果"json"参数没有将contenttype更改为json,那究竟该做什么呢?
如果我试试
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
});
Run Code Online (Sandbox Code Playgroud)
这有效但影响我拥有的每一个$ .get和$ .post并导致一些破坏.
那么有什么方法可以改变$ .post()的行为来发送contentType = application/json?
最近我意识到,一些adblocker扩展(例如adBlocker plus)阻止了一些Ajax调用.我在控制台上遇到了这个错误:
GET http://localhost/prj/conn.php?q=users/list/ net::ERR_BLOCKED_BY_CLIENT
Run Code Online (Sandbox Code Playgroud)
为什么它会阻止某些Ajax调用而不是其他调用,以及导致这种情况的原因 除了告诉用户关闭adblocker之外,还有其他解决方法吗?
ajax ×10
jquery ×6
javascript ×3
websocket ×2
comet ×1
content-type ×1
cookies ×1
firefox ×1
html ×1
html5 ×1
http ×1
http-headers ×1
httprequest ×1
java ×1
json ×1
jsp ×1
servlets ×1
session ×1