遇到麻烦我认为是一个相对简单的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 …
我正在研究我的这个个人项目,只是为了好玩,我想阅读一个xml文件,该文件位于http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml 并解析xml和用它来转换货币之间的价值.
到目前为止,我已经提出了下面的代码,这是非常基本的,以便读取xml,但我得到以下错误.
XMLHttpRequest无法加载****.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http://run.jsbin.com "访问.
$(document).ready(
function() {
$.ajax({
type: 'GET',
url: 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',
dataType: 'xml',
success: function(xml){
alert('aaa');
}
});
}
);
Run Code Online (Sandbox Code Playgroud)
我没有看到我的代码有任何问题所以我希望有人可以指出我的代码错误,以及我如何解决它.
是什么区别GET和POST的Ajax的请求?
我没有看到这两者之间有任何区别,除了当我使用GET时,参数是在URL中发送的,这对我来说实际上没有任何区别,因为所有请求都是在后台进行的,用户没有找到任何区别.
编辑:PUT和DELETE方法用于什么?
我正在使用以下帖子的代码:
首先,我将使用控制器操作的正确值填充数组变量.
使用下面的代码我认为只需在JavaScript代码中添加以下行就可以非常简单:
data["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
Run Code Online (Sandbox Code Playgroud)
该<%= Html.AntiForgeryToken() %>是在其正确的位置,动作有[ValidateAntiForgeryToken]
但我的控制器动作一直说:"无效的伪造令牌"
我在这做错了什么?
data["fiscalyear"] = fiscalyear;
data["subgeography"] = $(list).parent().find('input[name=subGeography]').val();
data["territories"] = new Array();
$(items).each(function() {
data["territories"].push($(this).find('input[name=territory]').val());
});
if (url != null) {
$.ajax(
{
dataType: 'JSON',
contentType: 'application/json; charset=utf-8',
url: url,
type: 'POST',
context: document.body,
data: JSON.stringify(data),
success: function() { refresh(); }
});
}
Run Code Online (Sandbox Code Playgroud) 我可以在JavaScript中使用XMLHttpRequests来请求与发出请求的服务器不同的服务器上的文件吗?
谢谢.
我正在开发一个应用程序,其中HTML和javascript块被传递给不同的客户端.我可以通过将以下内容添加到Web配置文件来获取html/javascript块:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
这对于做GETS非常有用.我遇到的问题是使用jQuery跨域执行POST:
$.ajax(
{
type: 'POST',
url: url,
crossDomain: true,
data: JSON.stringify(data),
dataType: 'json',
contentType: 'application/json',
success: function(responseData, textStatus, jqXHR)
{
alert('Success');
},
error: function (responseData, textStatus, errorThrown)
{
alert('POST failed.');
}
});
Run Code Online (Sandbox Code Playgroud)
我会有很多客户在使用我的应用程序(希望如此).我考虑过使用代理,但我无法控制客户端服务器,所以我无法安装httpHandler来充当代理.
关于我如何将来自不同客户的json数据跨域转发到我的ASP.Net MVC应用程序的任何建议?
我想对Web服务进行一次即发即弃的jQuery调用.
基本上,我想发送一个JSON对象http://myservice.com/uservisits/create,我不关心接收任何类型的返回响应.但是,我们希望为我们的几个域使用相同的服务,这意味着要遇到与Ajax相关的跨域限制.
你怎么做到这一点?JSONP上有很多这样的东西,但我不需要处理响应.我觉得我错过了一个明显的细节.
我正在使用简单的REST调用构建Cordova APP.
问题是,当我使用POST制作AJAX时,Chrome发送给我:"XMLHttpRequest无法加载http://192.168.1.111/project/app.预处理的响应在控制台上具有无效的HTTP状态代码405".
但是,如果我使用GET进行AJAX调用(基本上从数据库中返回一个值),那就像魅力一样.
我的AJAX电话是:
$.ajax({
url: "http://192.168.1.111/project/app",
type: "POST",
dataType: "json",
contentType: 'application/json',
data: {
"name": "Cordova"
},
success: function() {
navigator.notification.alert("Success!");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus + jqXHR.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
REST中的POST处理程序
require 'Slim/Slim.php';
$app = new Slim();
$app->post('/app', 'addApp');
$app->run();
function addApp() {
error_log('addApp\n', 3, '/var/tmp/php.log');
$request = Slim::getInstance()->request();
$callback = json_decode($request->getBody());
$sql = "INSERT INTO app (name) VALUES (:name)";
try {
$db = getConnection();
$stmt = $db->prepare($sql); …Run Code Online (Sandbox Code Playgroud) 所以我试图使用 $.ajax() 调用将数据提交到 API 端点。我已验证我可以使用curl以下格式的命令进行 POST :
curl -X POST -H "Content-Type: application/json" -d "{\"uname\":\"myusername2\",\"emailAddr\":\"user2@ex.com\"}" <url to my API endpoint>
Run Code Online (Sandbox Code Playgroud)
该curl命令返回一个空的 JSON 响应(看起来像{}),我的数据被放入数据库(这是我配置 API 网关端点要做的)。
但是,当我尝试使用一个$.ajax()命令执行此操作时,该命令被编程为在填写表单数据后单击按钮时触发,我无法让它工作。
var obj = new Object();
obj.uname = $uname;
obj.emailAddr = $email;
var stringedObj = JSON.stringify(obj);
alert("stringified: " + stringedObj);
$.ajax({
url: '<same url as in curl>',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(obj),
success: function(data) {
alert(JSON.stringify(data));
},
error: function(e) {
alert("failed" + JSON.stringify(e));
} …Run Code Online (Sandbox Code Playgroud) 在AngularJS中,我在子域中使用了Restful API但是我遇到的问题是cookie /会话没有跨域共享.对于Angular,我这样做:
app.config(['$httpProvider',
function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
Run Code Online (Sandbox Code Playgroud)
此外,当我用$ http发出请求时,我正在做
var object = {};
object.url = '/example'
object.withCredentials = true;
$http(object).success(object.success).error(object.error);
Run Code Online (Sandbox Code Playgroud)
在我的服务器端,我有:
if($_SERVER['REQUEST_METHOD']=='OPTIONS') {
if(isset($_SERVER['HTTP_X_FOWARDED_HOST']) && !empty($_SERVER['HTTP_X_FOWARDED_HOST'])) {
$origin=$_SERVER['HTTP_X_FOWARDED_HOST'];
} else {
$origin=$_SERVER['HTTP_ORIGIN'];
}
if(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && ($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='POST' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='DELETE' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='PUT')) {
header('Access-Control-Allow-Origin: '.$origin);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: *,X-Requested-With,Content-Type');
//header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
// http://stackoverflow.com/a/7605119/578667
header('Access-Control-Max-Age: 86400');
}
}
Run Code Online (Sandbox Code Playgroud)
现在我看到服务器说它将允许凭据但不在选项请求中发送.截图如下.
我究竟做错了什么?
ajax ×9
jquery ×6
javascript ×4
cors ×3
asp.net-mvc ×2
cross-domain ×2
php ×2
angularjs ×1
architecture ×1
cordova ×1
curl ×1
firefox ×1
json ×1
jsonp ×1
request ×1
semantics ×1
xml-parsing ×1