我无法使用jquery的ajax功能成功发布。
正在运行的页面的网址为http://localhost:9999
,目标网址(网络服务)为http://localhost:8080
。没有端口不相同,它们分别是9999和8080。
下面是请求和jquery ajax代码。
请求:
OPTIONS /profile/set_member HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost:9999
Access-Control-Request-Method: POST
jQuery ajax代码:
$.ajax({
type: "POST", url: "http://localhost:8080/profile/set_member",
contentType: "application/json", data: member,
error: function(){ alert('Update failed!'); },
processData: false,
success: function(){ alert('Update successful!'); }
});
答案 0 :(得分:6)
这是跨域ajax调用的问题。基本上(至少在Firefox中),出于安全原因,POST请求被转换为OPTIONS请求。我昨晚在这里发布了相同的完全事情。
WCF Ajax Call not working with Jquery $.ajax
我在localhost:23485上进行了$ .ajax调用,在IIS中托管的http://localhost上有一个Web服务。因为它们是不同的域,所以跨域开始并使事情变得困难。
答案 1 :(得分:4)
在您调用ajax的同一域上建立代理,例如用PHP:
<?php /* get.php */
$url = $_GET["Url"];
echo file_get_contents($url);
?>
拨打你的ajax电话:
$.ajax({ url: "get.php?Url=realurl.com" });
这是一种解决方法。
答案 2 :(得分:0)
调用什么处理程序? success
或error
处理程序?你能详细说明“不起作用”是什么意思吗?
您可能希望alert
处理程序中有error
个更多信息,如下所示:
error: function(XMLHttpRequest, textStatus, errorThrown) {
//console.log is better at least for debugging. You can change this back to alert
//when your code goes into production
console.log("Update unsuccessful. Status: ", textStatus, " error thrown: ", errorThrown);
}
textStatus
应该让您知道问题可能是什么。可能的值是“timeout”,“error”,“notmodified”和“parsererror”。一旦找出实际错误,请更新问题。
此外,如果您有Firebug,请检查“网络”选项卡以查看请求和响应。一些常见的错误来源:
json
或xml
,并且响应不是那种格式,则AJAX请求将失败。