请求的资源 ajax jquery 上没有 'Access-Control-Allow-Origin' header phonegap
No 'Access-Control-Allow-Origin' header is present on the requested resource ajax jquery phonegap
我正在尝试 运行 我的 phonegap 应用程序在 ripple 模拟器上,并使用 jquery 中的 ajax 方法从 webservice.asmx 调用方法,但出现 cors 错误:
XMLHttpRequest cannot load https:\rippleapi.herokuapp.com\xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//www.my-domain.com/WebService.asmx/selectData. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http:\localhost:4400' is therefore not allowed access. The response had HTTP status code 503.
- 已在服务器端提供 cors (web.config):
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="index.aspx" />
<add value="WebService.asmx"/>
</files>
</defaultDocument>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
</customHeaders>
</httpProtocol>
</system.webServer>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
<system.serviceModel>
我的AJAX方法:
$.ajax({
输入:"POST",
跨域:真,
url: "http://www.my-domain.com/WebService.asmx/selectData",
数据:JSON.stringify(campaignData),
内容类型:"application/json; charset=utf-8",
数据类型:"json"、
成功:功能(味精)
{
var 响应=msg.d;
var resultLoop=$.parseJSON(响应);
console.log(回应)
},
错误:函数(xhr,ajax选项,thrownError)
{
$.mobile.loading('hide');
alert("status :"+xhr.status +" thrownError :"+ thrownError +" ajaxOption : "+ ajaxOptions);
}
});
无法解决这个问题,不知道我哪里做错了或遗漏了什么
我必须在其中更改代码,以便它与服务器通信并获取数据。
您可以使用 jsonp 作为跨域 ajax 请求:
$.ajax({
type:"POST",
url: "http://www.my-domain.com/WebService.asmx/selectData",
data: JSON.stringify(campaignData),
contentType: "application/json;charset=utf-8",
dataType:"jsonp",
success: function(msg)
{
var response=msg.d;
var resultLoop=$.parseJSON(response);
console.log(response)
},
error: function(xhr, ajaxOptions, thrownError)
{
$.mobile.loading('hide');
alert("status :"+xhr.status +" thrownError :"+ thrownError +" ajaxOption : "+ ajaxOptions);
}
});
还有一件事,您在 Web 方法 'callback' 中添加了一个参数,服务器端的字符串类型为:
selectData(string callback){
var JSONString = new JavaScriptSerializer().Serialize("");
//JSONString is a json format
return callback+"( "+JSONString + " )";
}
您可以在 sever-side 代码中添加此方法(post、删除等),或者您可以使用 chrome plug-in Access-Control-Allow-Headers。就像 php
header("Access-Control-Allow-Origin: http://localhost:8080");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, DELETE, PUT");
header("Access-Control-Allow-Credentials: true");
是 运行 ripple 模拟器上的 phonegap 应用程序,将跨域代理设置更改为已禁用并且它有效。
我正在尝试 运行 我的 phonegap 应用程序在 ripple 模拟器上,并使用 jquery 中的 ajax 方法从 webservice.asmx 调用方法,但出现 cors 错误:
XMLHttpRequest cannot load https:\rippleapi.herokuapp.com\xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//www.my-domain.com/WebService.asmx/selectData. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http:\localhost:4400' is therefore not allowed access. The response had HTTP status code 503.
- 已在服务器端提供 cors (web.config):
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="index.aspx" />
<add value="WebService.asmx"/>
</files>
</defaultDocument>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
</customHeaders>
</httpProtocol>
</system.webServer>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
<system.serviceModel>
我的AJAX方法:
$.ajax({
输入:"POST",
跨域:真,
url: "http://www.my-domain.com/WebService.asmx/selectData",
数据:JSON.stringify(campaignData),
内容类型:"application/json; charset=utf-8",
数据类型:"json"、
成功:功能(味精)
{
var 响应=msg.d;
var resultLoop=$.parseJSON(响应);
console.log(回应)
},
错误:函数(xhr,ajax选项,thrownError)
{
$.mobile.loading('hide');
alert("status :"+xhr.status +" thrownError :"+ thrownError +" ajaxOption : "+ ajaxOptions);
}
});
无法解决这个问题,不知道我哪里做错了或遗漏了什么 我必须在其中更改代码,以便它与服务器通信并获取数据。
您可以使用 jsonp 作为跨域 ajax 请求:
$.ajax({
type:"POST",
url: "http://www.my-domain.com/WebService.asmx/selectData",
data: JSON.stringify(campaignData),
contentType: "application/json;charset=utf-8",
dataType:"jsonp",
success: function(msg)
{
var response=msg.d;
var resultLoop=$.parseJSON(response);
console.log(response)
},
error: function(xhr, ajaxOptions, thrownError)
{
$.mobile.loading('hide');
alert("status :"+xhr.status +" thrownError :"+ thrownError +" ajaxOption : "+ ajaxOptions);
}
});
还有一件事,您在 Web 方法 'callback' 中添加了一个参数,服务器端的字符串类型为:
selectData(string callback){
var JSONString = new JavaScriptSerializer().Serialize("");
//JSONString is a json format
return callback+"( "+JSONString + " )";
}
您可以在 sever-side 代码中添加此方法(post、删除等),或者您可以使用 chrome plug-in Access-Control-Allow-Headers。就像 php
header("Access-Control-Allow-Origin: http://localhost:8080");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, DELETE, PUT");
header("Access-Control-Allow-Credentials: true");
是 运行 ripple 模拟器上的 phonegap 应用程序,将跨域代理设置更改为已禁用并且它有效。