如何将 Json 数组作为统一字段传递给 WWWform

Posted

技术标签:

【中文标题】如何将 Json 数组作为统一字段传递给 WWWform【英文标题】:How to pass Json array to WWWform as field in unity 【发布时间】:2015-07-18 22:09:55 【问题描述】:

我想传递wwwform中的三个字段,其中包含两个单值和一个json数组。

这是我的 Json:


     "Fname":"Abc",
     "Lname":"Xyz",
     "Marks": ["MarksA":"23","MarksB":"65" ,
     "MarksA":"24","MarksB":"56"  ]
   

我当前的代码是

 void Start()
    
        WWWForm form = new WWWForm();
        form.AddField("Fname", "Abc");
        form.AddField("Lname", "Xyz");
        //passing the array as string
        string Mymarks = "[\"MarksA\":\"23\",\"MarksB\":\"65\" ,\"MarksA\":\"24\",\"MarksB\":\"56\"  ]";
        form.AddField("Marks", Mymarks);
        WWW www = new WWW("Urltoservice", form);
        StartCoroutine("PostRequest", www);
    
    IEnumerator PostRequest(WWW www)
    
        yield return www;
        if (www.error == null)
        
            Debug.Log("Session Saved");
        
        else
        
            Debug.Log("WWW Error: " + www.error);

        
    

但我收到了500 internal server Error。请帮我。

【问题讨论】:

您收到响应意味着此代码有效。您的服务器代码 - 没有。它要么期望不同的输入,要么有不相关的问题。请发布服务器端代码。 我可以使用运行良好的提琴手向服务器发送数据。如果我传递两个字段它也可以工作,第三个字段插入为空 将您的服务器代码更改为print_r($_POST); die();(或您的服务器语言中的等效代码)并查看 fiddler 看到的输出和统一看到的差异。在 Unity 中,要查看服务器输出,请将 print(www.text); 替换为 Debug.Log("Session Saved"); 我怀疑 fiddler 传递的内容与 Unity 不同。 我面临的唯一问题是当我传递一个对象数组并且当我传递简单对象时没有问题,在那个对象中我传递的是一对多的关系,如果我是仅传递父对象它工作正常,但是当我通过父对象传递相关子集合时出现错误,例如 "Fname":"Abc", "Lname":"Xyz", "Marks": ["MarksA":"23 ","MarksB":"65" , "MarksA":"24","MarksB":"56" ] 如果我不传递标记值,则在此数据中它可以正常工作,但是当我传递完整数据时我收到错误 500 内部服务器错误 我也用 fiddler 检查过它工作正常并返回我需要的 id 但统一我得到错误,它没有打印 print(www.text);因为错误的条件 【参考方案1】:

尝试使用 WWW 代替 WWWForm

    using UnityEngine;

    using UnityEngine.UI;

    using System.Collections;

    using System.Collections.Generic;

    public class SendData : MonoBehaviour 

     void Start()
     
         gameObject.GetComponent<Button>().onClick.AddListener(SendOnClick);
     
     IEnumerator WaitForWWW(WWW www)
     
         yield return www;


         string txt = "";
         if (string.IsNullOrEmpty(www.error))
             txt = www.text;  //text of success
         else
             txt = www.error;  //error
         GameObject.Find("TextDemo").GetComponent<Text>().text =  "--------\n\n" + txt;
     
     void SendOnClick()
     
         try
         
             GameObject.Find("TextDemo").GetComponent<Text>().text = "Starting..";   
             string ourPostData = "\"MarksA\":\"23\",\"MarksB\":\"65\" ,\"MarksA\":\"24\",\"MarksB\":\"56\" ";
             Dictionary<string,string> headers = new Dictionary<string, string>();
             headers.Add("Content-Type", "application/json");
             byte[] jData = System.Text.Encoding.ASCII.GetBytes(ourPostData.ToCharArray());
             WWW api = new WWW("YOUR URL", jData, headers);
             StartCoroutine(WaitForWWW(api));
         
         catch (UnityException ex)  Debug.Log(ex.message); 
     

    

【讨论】:

以上是关于如何将 Json 数组作为统一字段传递给 WWWform的主要内容,如果未能解决你的问题,请参考以下文章