8

我有一个 jquery 提交事件,它收集表单数据并将其放入 jquery 对象中。我想获取该 jquery 对象并将其传递给 Coldfusion Web 服务,我可以在其中使用它来更新 xml 文件。我不想要来自网络服务的响应,我只想将它发送到网络服务并摆弄那里的数据。

客户端/JQuery:

$("#update").on('submit',function() {
    $linkName = $('#update').find('#linkName').val();
    $linkURL = $('#update').find('#linkURL').val();
    $linkInfo = $('#update').find('#linkDesc').val();
    $numOfLinks = $('.linkSection').length;
    if ($numOfLinks > 0){
    // Here the sub link names and urls put into an array
        $subLinkName = [];
        $subLinkURL = [];   
        $('.linkSection').each(function(index, element) {
            $subLinkName.push($(this).find('#subLinkName').attr('value'));
            $subLinkURL.push($(this).find('#subLinkURL').attr('value'));

            $data = {linkName: $linkName, linkURL: $linkURL, linkID : $linkID, linkDescription : $linkInfo, subLinkNames : $subLinkName, subLinkURLs : $subLinkURL}; 
        });
    // Optionally, you could put the name and url in the array object here but not sure which is better to do   
        //$subLink =[]; 
        //$('.linkSection').each(function(index, element) {
            //$subLink.push($(this).find('#subLinkName').attr('value'));
            //$subLink.push($(this).find('#subLinkURL').attr('value'));
        //});   
    }else{
        alert('hey');
        $data = {linkName: $linkName, linkURL: $linkURL,  linkID : $linkID, linkDescription : $linkInfo};
    }
    //alert($data);
    $.ajax({
        type: "POST",
        data: {
            method: "UpdateRegularLink",            
            returnFormat:"json",            
            formData: JSON.stringify($data)
        },
        url: "../../WebServices/RMSI/rmsi.cfc",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function() {                    
            alert('about to post');
        },
        error: function(data,status,error){
            alert(data+': '+status+': '+error);
        },
        done: function(data){
            alert('success');
        }
    });
});

服务器端/CFC:

<cfcomponent>

    <cfset xmlpath = "e:\webapps\NRCNewsApps\RMSI\xml" />

    <cffunction name="UpdateRegularLink" access="remote" output="false" >
    <cfargument name="formData" required="true" type="string"  />
    <cfset var cfStruct = DeserializeJSON(arguments.formData)>

    <!--- now I want to use the data --->
</cffunction>   

</cfcomponent>

在 Chrome 中我得到“未经授权”在萤火虫中我得到“意外字符”

只要问我,我会添加您需要的更多信息。

4

1 回答 1

6

因此,当您对要传递给coldfusion的数据进行字符串化时,coldfusion不理解它,并将各种字符添加到您的字符串中,使其无法被coldfusion读取。

必须使用 toString() 作为中间方法调用,因为 JSON 数据包以字节数组(二进制数据)的形式出现,需要在 ColdFusion 将其解析为 JSON 值之前将其转换回字符串。

还可以调用@Chandan Kumar 将该方法添加到 url 的末尾,而不是将其与数据一起传递。实际上,我一直在看那件作品,但最终它就是这样运作的,所以向你致敬

var ajaxResponse = $.ajax({
                        type: "POST",
                        url: "../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLinkmethod=,
                        contentType: "application/json; charset=utf-8",
                        data: JSON.stringify($data),
                        //dataType: "json",
                        beforeSend: function() {                    
                            //alert($data);
                        },
                        error: function(data,status,error){
                            alert(data+': '+status+': '+error);
                        }
                    }).done(function(entry) {
                        alert('success');
                    });


                    ajaxResponse.then(
                        function( apiResponse ){

                        // Dump HTML to page for debugging.
                        $( "#response" ).html( apiResponse );

                        }
                    );

氟氯化碳

<cfcomponent>
  <cffunction name="UpdateRegularLink" access="remote" returntype="xml">

    <cfset requestBody = toString( getHttpRequestData().content ) />

    <!--- Double-check to make sure it's a JSON value. --->
    <cfif isJSON( requestBody )>

        <!--- Echo back POST data. --->
        <cfdump
            var="#deserializeJSON( requestBody )#"
            label="HTTP Body"
        />

    </cfif>


  </cffunction>
</cfcomponent>
于 2013-10-03T14:17:39.987 回答