Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何编写对简单web服务的跨域JSON/Ajax调用_Jquery - Fatal编程技术网

Jquery 如何编写对简单web服务的跨域JSON/Ajax调用

Jquery 如何编写对简单web服务的跨域JSON/Ajax调用,jquery,Jquery,我有一个使用此表单的web服务: http://<remote_domain_ip>/api/v1/search/?query=the_query 视情况而定。如果您是在domaina.com上,并且您的web服务也位于同一位置,那么您可以简单地通过以下方式执行此操作: $.ajax('path-to-your-service/WebMethodName', data, function(r){ // Success callback, you have your answ

我有一个使用此表单的web服务:

http://<remote_domain_ip>/api/v1/search/?query=the_query

视情况而定。如果您是在domain
a.com
上,并且您的web服务也位于同一位置,那么您可以简单地通过以下方式执行此操作:

$.ajax('path-to-your-service/WebMethodName', data, function(r){
    // Success callback, you have your answer in r.d object
}, function(e){
    // Error callback
});
callback({
   a: a1,
   b: b1,
   c: c1
});
但是,如果您在say
b.com
上,并且web服务位于
a.com
,那么您将受到一个称为的概念的限制。换句话说,除非遵循某些规则,否则不能使用AJAX调用(或XMLHttpRequest)从该web服务获取数据。一种是使用HTTP头字段,这有一些跨浏览器的问题。另一种方法是使用,这需要服务器支持它

要使用JSONP,应该使用jQuery的
$.getJSON()
方法,并在通过HTTP GET发送的参数旁边提供回调查询字符串键

$.getJSON('path-to-your-service?x=some&y=thing?callback?', function(r){
    // Success callback. Your JSON object would be the r parameter
});
如果您是web服务的创建者,我建议您使用JSONP,如果您使用.NET framework,我还建议您只使用通用处理程序而不是web服务,因为我们在配置web服务时遇到很多问题。但是,在服务器代码中,您应该检查传入的GET请求,以获得一个名为callback的查询字符串键,如果它存在,您应该用以下方式将返回的JSON封装在函数中:

$.ajax('path-to-your-service/WebMethodName', data, function(r){
    // Success callback, you have your answer in r.d object
}, function(e){
    // Error callback
});
callback({
   a: a1,
   b: b1,
   c: c1
});

理解JSONP(概念及其发生方式)非常关键。如果没有深入的了解,您未来的维护将是一个巨大的负担。我建议你们读一读这个问题。

你们不能,假设你们所在的领域不同。如果您有权访问远程\u域\u ip,或者可以让他们为您托管文件,则可以使用。您可以尝试使用类似的涉及Flash的工作环境工具。否则,您将需要在后端执行请求