Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
使用C#和WFC的跨域jQuery Ajax_C#_Web Services_Jquery_Jquery Mobile_Cordova - Fatal编程技术网

使用C#和WFC的跨域jQuery Ajax

使用C#和WFC的跨域jQuery Ajax,c#,web-services,jquery,jquery-mobile,cordova,C#,Web Services,Jquery,Jquery Mobile,Cordova,我有一个用C#和WCF编写的小型Web服务 我有一点jQuery代码 $.support.cors = true; $.ajax({ type: "POST", url: "http://localhost:61614/Service1.asmx/HelloWorld", data: '{}', dataType: "json", succes

我有一个用C#和WCF编写的小型Web服务

我有一点jQuery代码

        $.support.cors = true;

        $.ajax({
            type: "POST",
            url: "http://localhost:61614/Service1.asmx/HelloWorld",
            data: '{}',
            dataType: "json",
            success: function (msg) {
                alert(0);
            }, error: function (a, b, c) { alert("Err:" + c ); 
            }
        });
这就叫Web服务。打电话没有问题,但返回时会出错

Web服务位于一个应用程序中,Web页面本身就是一个HTML页面。最终,HTML将在PhoneGap中使用

我试过各种各样的东西

添加
contentType:“application/json;charset=utf-8”
会导致整个调用失败。 使用
数据类型:“jsonp”
会导致调用失败

基本上,上面调用WS-but返回时出错,这很奇怪

我的要求是需要从webservice返回一个JSON对象,它必须在Safari中工作

有人有完整的JSONP调用示例代码吗?

来自:

如果URL包含字符串“callback=?”(或服务器端API定义的类似字符串),则请求将被视为JSONP。有关详细信息,请参阅$.ajax()中对JSONP数据类型的讨论

为了将您的请求视为JSONP请求,您需要在URL中包含
callback=?
。这会告诉jQuery创建一个回调函数,并将该函数的名称作为回调参数传递给服务器

在服务器端代码中,您的方法随后必须返回JSON代码包装或填充,并将JavaScript函数的名称作为查询字符串中的回调参数传入

本质上,您所做的是将JavaScript返回到客户端浏览器,该浏览器立即运行,并调用页面上下文中已定义的函数

JavaScript:

$.getJSON("http://localhost:61614/Service1.asmx/HelloWorld?callback=?",
    function(data) {

        // alert raw JSON data
        alert(JSON.stringify(data));

        // access the "say" property and alert it
        alert(data.say);
    }
);
服务器端:

这是您需要在服务器端执行的操作的粗略版本:

// get the callback parameter value and assign to the String callback
...
return callback + "( { 'say' : 'HelloWorld' } );";
发动机罩下发生的情况的进一步技术解释:

虽然这不是您今天需要知道的,但这可能有助于您进一步了解jQuery是如何实现JSONP的

其计算结果可能如下所示:

return "jquery43214321432143242({'say':'HelloWorld'});"
其中,
jquery43214321432143242
是为成功回调函数指定的随机名称。同样,由于返回的文本是使用text/javascript返回的,因此它会立即运行,将
{say':'HelloWorld}
对象作为参数传递给函数

结果输出应该是一条表示原始JSON的警报消息,以及从
属性中提取的单词“HelloWorld”。

来自:

如果URL包含字符串“callback=?”(或服务器端API定义的类似字符串),则请求将被视为JSONP。有关详细信息,请参阅$.ajax()中对JSONP数据类型的讨论

为了将您的请求视为JSONP请求,您需要在URL中包含
callback=?
。这会告诉jQuery创建一个回调函数,并将该函数的名称作为回调参数传递给服务器

在服务器端代码中,您的方法随后必须返回JSON代码包装或填充,并将JavaScript函数的名称作为查询字符串中的回调参数传入

本质上,您所做的是将JavaScript返回到客户端浏览器,该浏览器立即运行,并调用页面上下文中已定义的函数

JavaScript:

$.getJSON("http://localhost:61614/Service1.asmx/HelloWorld?callback=?",
    function(data) {

        // alert raw JSON data
        alert(JSON.stringify(data));

        // access the "say" property and alert it
        alert(data.say);
    }
);
服务器端:

这是您需要在服务器端执行的操作的粗略版本:

// get the callback parameter value and assign to the String callback
...
return callback + "( { 'say' : 'HelloWorld' } );";
发动机罩下发生的情况的进一步技术解释:

虽然这不是您今天需要知道的,但这可能有助于您进一步了解jQuery是如何实现JSONP的

其计算结果可能如下所示:

return "jquery43214321432143242({'say':'HelloWorld'});"
其中,
jquery43214321432143242
是为成功回调函数指定的随机名称。同样,由于返回的文本是使用text/javascript返回的,因此它会立即运行,将
{say':'HelloWorld}
对象作为参数传递给函数


结果输出应该是一条表示原始JSON的警报消息,以及从
属性中提取的单词“HelloWorld”。

不确定它是否有帮助@griegs-第一步,确保在浏览器中返回如下所示的JavaScript函数:
test({'say':'HelloWorld'));
。除非您这样做,否则jsonp请求将不会成功。您可以在地址栏中进行测试。希望这有帮助。需要澄清的一点是,您是否100%确定在上线后会跨域发出请求?如果是同一个域,那么您可以返回JSON而不使用填充/包装函数。不确定它是否有帮助@griegs-F第一步,确保在浏览器中返回如下所示的JavaScript函数:
test({'say':'HelloWorld'})
。除非您这样做,否则jsonp请求将不会成功。您可以在地址栏中进行测试。希望这有帮助。有一件事需要澄清。您是否100%确定在上线后会跨域发出请求?如果是同一个域,那么您只需返回JSON而不需要填充/包装函数。jmort253,这仍然不是calli由于某种原因正在关闭web服务。是否返回
test({'say':'HelloWorld});
在浏览器中?如果不是,这是第一步。它基本上是动态生成的文本/javascript。请先尝试一下。这是一个更复杂的JSONP示例,但它应该让您了解在浏览器中点击URL时需要看到什么。请注意JSON对象是如何包装在名为“test”的函数中的“:这是我返回的返回”({'data':'Hello Worlds'})”;这些都是.NET和JSON请求的明显缺陷。请参阅本文。我还将更新我的答案以反映解决方法。但是,了解您是否需要跨域JSONP(我正在从example.com向domain.com的服务器发出请求)或只是普通JSON(我正在发出请求)非常重要