热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何利用jQuery的JSONP技术实现跨域调用外部Web服务?

本文探讨了如何利用jQuery的JSONP技术实现跨域调用外部Web服务。通过详细解析JSONP的工作原理及其在jQuery中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。

I had a previous question can jquery ajax call external webservice?

我有一个先前的问题可以jquery ajax调用外部webservice?


and some good developers answered me to use jsonp, but i don't know how to use it, i am trying to call my service using this code:

一些优秀的开发人员回答我使用jsonp,但我不知道如何使用它,我试图使用此代码调用我的服务:

$.ajax({
            type: "POST",
            url: "http://localhost:1096/MySite/WebService.asmx?callback=?",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
            success: function(msg) {alert(msg);}
            });


and this is my service code:

这是我的服务代码:

[WebMethod]
public string HelloWorld() {
    return "Hello World " ;
}


anyone have examples or can explain this issue for me?

任何人都有例子或可以为我解释这个问题?

UPDATE:
I wrote the code again to be like this:

更新:我再次编写代码如下:

$.getJSON("http://localhost:1096/YourShoppingTest1/WebService.asmx/HelloWorld?jsOnp=?",{name:"test"},
    function(data){
    alert(data.x);
    });


and the service like this:

和这样的服务:

[WebMethod]
public string HelloWorld(string name)
{
    return "( {\"x\":10 , \"y\":100} )";
}


But it always give me this error when back: "missing ; before statement [Break on this error] ( {"x":10 , "y":100} )"

但它总是在返回时给我这个错误:“丢失;在声明之前[打破此错误]({”x“:10,”y“:100})”

and never call the success function, can anyone help with that?

并且从不调用成功函数,任何人都可以帮忙吗?

5 个解决方案

#1


I've had a similiar problem, unfortunately I don't have the code at hand.

我有一个类似的问题,不幸的是我没有手头的代码。

From memory:

  • Add [ScriptService] as an attribute to your Web Method
  • 将[ScriptService]作为属性添加到Web方法中

  • Also change your url to call the HelloWorld procedure.
    Something like http://localhost:1096/MySite/WebService.asmx/HelloWorld?callback
  • 同时更改您的网址以调用HelloWorld过程。类似于http:// localhost:1096 / MySite / WebService.asmx / HelloWorld?回调

See: What are some good examples of JQuery using JSONP talking to .net? & What is the best way to call a .net webservice using jquery?

请参阅:使用JSONP与.net交谈的JQuery的一些很好的例子是什么?使用jquery调用.net webservice的最佳方法是什么?

#2


The point with JSONP is the P! P as in padding. You are padding the JSON object literal with a function call - invoking a function on the calling page taking the data object as an argument.

JSONP的观点是P! P如填充。您正在使用函数调用填充JSON对象文字 - 在调用页面上调用函数,将数据对象作为参数。

I.e. if you request the webservice, send the desired callback function name in the query string

即如果您请求Web服务,请在查询字符串中发送所需的回调函数名称

...service/?callback=hello

Then the service should answer (using appropriate mime type):

然后服务应该回答(使用适当的mime类型):

hello({a: 17, b: 4117});

For a more in-depth explanation, see: http://www.stpe.se/2008/10/cross-site-data-retrieval-using-jsonp/

有关更深入的说明,请参阅:http://www.stpe.se/2008/10/cross-site-data-retrieval-using-jsonp/

#3


You can't issue a POST request using JSONP, only GET (because GETs the resource).

您不能使用JSONP发出POST请求,只能发出GET(因为

#4


Hezil's code worked for me, but I had to change the server code to this:

Hezil的代码对我有用,但我不得不将服务器代码更改为:

$data = '{"name" : "hello world"}'; echo $_GET['callback'] . '(' . $data . ');';

Note the "callback" instead of "jsoncallback".

注意“回调”而不是“jsoncallback”。

#5


First you should add jsonp ('callback') in your web server like $_GET['callback']

首先,您应该在Web服务器中添加jsonp('callback'),例如$ _GET ['callback']

Second ,don't forget the ';' after the output scripts

其次,不要忘记';'输出脚本之后

$data = '{"name" : "hello world"}';
echo $_GET['jsoncallback'] . '(' . $data . ');';

Now you can find out why the "missing ; before statement" problem occured.

现在你可以找出为什么会出现“缺失;在声明之前”的问题。

html:

$.getJSON({"http://localhost:1096/MySite/WebService.asmx?callback=?",
        function(data){alert(data);}
        });

推荐阅读
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 捕获并处理用户输入数字时的异常,提供详细的错误提示与指导
    在用户输入数字时,程序能够有效捕获并处理各种异常情况,如非法字符或格式错误,并提供详尽的错误提示和操作指导,确保用户能够准确输入有效的数字数据。通过这种方式,不仅提高了程序的健壮性和用户体验,还减少了因输入错误导致的系统故障。具体实现中,使用了Java的异常处理机制,结合Scanner类进行输入读取和验证,确保了输入的合法性和准确性。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • C# .NET 4.1 版本大型信息化系统集成平台中的主从表事务处理标准示例
    在C# .NET 4.1版本的大型信息化系统集成平台中,本文详细介绍了主从表事务处理的标准示例。通过确保所有操作要么全部成功,要么全部失败,实现主表和关联子表的同步插入。主表插入时会返回当前生成的主键,该主键随后用于子表插入时的关联。以下是一个示例代码片段,展示了如何在一个数据库事务中同时添加角色和相关用户。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 在 Java 中,守护线程是一种特殊的后台线程,类似于操作系统中的后台进程。其主要特点是当所有非守护线程都结束时,守护线程会自动终止。这种机制使得守护线程非常适合用于执行一些辅助性的任务,如垃圾回收、日志记录等。通过设置线程为守护线程,可以确保在应用程序的主要任务完成后,这些辅助任务能够自动停止,从而避免资源浪费。例如,可以通过 `Thread.setDaemon(true)` 方法将线程设置为守护线程。 ... [详细]
  • 在ASP.NET中,实现页面间数据传递有多种技术方案。其中一种常见方法是通过URL链接地址传递参数,例如在 `send.aspx` 页面中,可以通过点击按钮将数据附加到URL中,然后在目标页面 `receive.aspx` 中解析这些参数。此外,还可以利用Session、ViewState、Cookie等机制来实现跨页面的数据共享,每种方法都有其适用场景和优缺点。 ... [详细]
  • HDU1176:免费馅饼问题的动态规划解法分析
    题目“免费馅饼”通过动态规划方法进行了解析。该问题的时间限制为 Java 2000ms 和其他语言 1000ms,内存限制为 Java 65536K 和其他语言 32768K。本文详细探讨了如何利用动态规划算法高效求解此问题,并对算法的时间复杂度和空间复杂度进行了深入分析。此外,还提供了具体的实现步骤和代码示例,帮助读者更好地理解和应用这一方法。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
author-avatar
新梅乀_Esther
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有