Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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# WCF和Ajax。不允许的方法快把我逼疯了_C#_Jquery_Ajax_Wcf_Web Config - Fatal编程技术网

C# WCF和Ajax。不允许的方法快把我逼疯了

C# WCF和Ajax。不允许的方法快把我逼疯了,c#,jquery,ajax,wcf,web-config,C#,Jquery,Ajax,Wcf,Web Config,我正在将ajax连接到wcf服务。但不允许继续获取方法。已经调试了好几天了。我不明白。 我只是在测试默认的GetData(int-value)方法 阿贾克斯: 服务1: public string GetData(String value) { return string.Format("You entered: {0}", value); } 上面没有任何内容公共类服务1:IService1。 上面有一个[ServiceContract

我正在将ajax连接到wcf服务。但不允许继续获取方法。已经调试了好几天了。我不明白。 我只是在测试默认的GetData(int-value)方法

阿贾克斯:

服务1:

public string GetData(String value)
        {
            return string.Format("You entered: {0}", value);
        }
上面没有任何内容
公共类服务1:IService1
。 上面有一个
[ServiceContract]
公共接口IService1

我添加了很多东西,删除了很多东西。。我不知道了。
我怀疑它是我的web.config文件,我不明白那部分的意思。你的操作合同表明它是一个post方法,但你是以一个只支持
get
请求的
JSONP
请求它的。如果它不是跨域请求,您不需要使用JSONP,只需为您的请求将method设置为
Post
,并删除类型。您的响应格式也不是JSON对象。根据您的需要,通过更改契约或更改方法中的返回数据,也可以更改它,然后它就可以工作了

编辑以供注释:

首先,JSONP不是实际的xmlhttprequest对象请求。它所做的是在页面中添加一个脚本标记,该标记具有回调函数,并将请求数据作为参数。主要针对跨域数据共享。JSONP请求返回如下内容

请求URL:domain.com/getJsonp?callback=processJSONP

返回

processJSONP( {
   resultList: [{data: "hello"}, 
                {data: "world"}
   // and lost of data you need.
   ]
});
请注意processJSONP,这是页面或库中的函数,可以执行任何您想要的操作

function processJSONP(jsonpResult) {
   for(var key in jsonpResult.resultList)
   {
      //process the data
   }
}

如果您确实需要使用POST获取数据,那么它不能是JSONP。它必须是一个AJAX请求,并且必须在同一个域中。在这种情况下,您可以在AJAX请求的success函数中处理数据。

好的,2天后,我已经修复了它

以下是我的步骤,感谢所有做出贡献的人

  • 在iSeries界面中,我将以下内容添加到我的webinvoke中:

    BodyStyle=WebMessageBodyStyle.WrappedRequest

  • 将数据类型从jsonp更改为json,jsonp只支持GET(多亏了Onur TOPAL)

  • 将我的ajax/json文件放在我的visual studio项目文件夹中。这将使其在IIS服务器上运行


  • 尝试指定
    UriTemplate
    ,它应该类似于
    WebInvoke(Method=“POST”,UriTemplate=“GetData”)
    。另外,
    jsonp
    json
    不一样,因此首先应该在ajax调用中使用
    数据类型:“json”
    。Json的问题是它给了我两个错误:方法不允许,访问控制允许源代码不允许
    originnull。我刚才做的是将ajax文件移动到wcf项目的根目录下。我收到此错误:
    “反序列化System.String类型的对象时出错。应为命名空间“”中的结束元素“root”。从命名空间中找到元素“value”
    上一个错误的原因是参数的类型不匹配。我不知道如何解决这个问题,但您可以尝试删除或更改合同中的RequestFormat=WebMessageFormat.Json。这很有意义。Json的问题是,它给我提供了访问控制Allow Origin不允许的errors method not allowed和
    Origin null,而且它必须是POST方法。GET不支持输入参数根据JSONP的定义,它是GET only吗?如果我需要发帖或其他什么呢?有时候一个人从客户那里得到非常奇怪的规格……明白了。所以,基本上,对于CORS,我们只能使用GET,对吗?由于JSONP是跨域调用的“唯一”方法,并且它只能使用GET。。。这感觉有点奇怪,但我相信你的话。
    
    public string GetData(String value)
            {
                return string.Format("You entered: {0}", value);
            }
    
    processJSONP( {
       resultList: [{data: "hello"}, 
                    {data: "world"}
       // and lost of data you need.
       ]
    });
    
    function processJSONP(jsonpResult) {
       for(var key in jsonpResult.resultList)
       {
          //process the data
       }
    }